Изменение параметров ядра (Linux)

В установках с полномочиями root менеджер баз данных использует формулу для автоматической настройки параметров ядра, устраняя тем самым необходимость настройки этих параметров вручную.

Прежде чем начать

Для изменения параметров ядра необходимы полномочия root.

Процедура

Чтобы изменить параметры ядра в Red Hat и SUSE Linux®:

  1. Введите командуipcs -l, чтобы получить список текущих значений параметров ядра.
  2. Проанализируйте вывод команды, чтобы определить, надо ли изменять параметры ядра, сравнив текущие значения с принудительно задаваемыми минимальными значениями в следующей таблице.
    Параметр ядра IPC Принудительно устанавливаемое минимальное значение
    kernel.shmmni (SHMMNI) 256 * <размер оперативной памяти в Гбайтах>
    kernel.shmmax (SHMMAX) <размер оперативной памяти в байтах>1
    kernel.shmall (SHMALL) 2 * <размер оперативной памяти в страницах с системным размером страниц по умолчанию>2
    kernel.sem (SEMMNI) 256 * <размер оперативной памяти в Гбайтах>
    kernel.sem (SEMMSL) 250
    kernel.sem (SEMMNS) 256 000
    kernel.sem (SEMOPM) 32
    kernel.msgmni (MSGMNI) 1 024 * <размер оперативной памяти в Гбайтах>
    kernel.msgmax (MSGMAX) 65 536
    kernel.msgmnb (MSGMNB) 65 536 3
    1. Для 32-битной операционной системы Linux принудительно устанавливаемый параметр для SHMMAX ограничен значением 4 294 967 295 байт.
    2. SHMALL ограничивает общий объем виртуальной совместной памяти, которая может быть выделена системе. Каждый сервер данных Db2 эффективно управляет тем объемом системной памяти, который он использует; ее называют также переданная память (committed memory). Сервер данных Db2 выделяет больше виртуальной памяти, чем ему передано, чтобы поддерживать предварительное выделение памяти и динамическое управление памятью. Предварительное выделение памяти повышает производительность. Динамическое управление памятью - это процесс увеличения и сокращения действительного использования памяти в отдельных областях виртуальной памяти совместного использования. Для поддержки предварительного выделения памяти и динамического управления памятью серверам данных часто необходимо выделять в системе больший объем виртуальной памяти совместного использования, чем физический объем оперативной памяти. Но для ядра это значение задается как число страниц.
    3. Производительность нагрузки может увеличиться в случае большего предельного размера очереди сообщений, который задается в байтах параметром MSGMNB. Использование памяти очередью сообщений можно просмотреть, введя команду ipcs -q. Если очереди сообщений уже достигли предельного размера или близки к нему при операциях загрузки, рассмотрите возможность увеличения предельного размера очереди сообщений.
    Ниже приведен пример вывода команды ipcs с комментариями после //, указывающими названия параметров:
       # ipcs -l
    
       ------ Shared Memory Limits --------
       max number of segments = 4096	             // SHMMNI	
       max seg size (kbytes) = 32768               // SHMMAX
       max total shared memory (kbytes) = 8388608  // SHMALL
       min seg size (bytes) = 1
    
       ------ Semaphore Limits --------
       max number of arrays = 1024		             // SEMMNI
       max semaphores per array = 250              // SEMMSL
       max semaphores system wide = 256000         // SEMMNS
       max ops per semop call = 32                 // SEMOPM
       semaphore max value = 32767
    
       ------ Messages: Limits --------
       max queues system wide = 1024	            // MSGMNI
       max size of message (bytes) = 65536         // MSGMAX
       default max size of queue (bytes) = 65536    // MSGMNB
    • В первом разделе, Shared Memory Limits (Предельные значения для совместно используемой памяти), предельное значение SHMMAX - это максимальный размер сегмента совместно используемой памяти в системе Linux. Предельное значение SHMALL - это максимальное выделение страниц совместно используемой памяти в системе.
      • Рекомендуется задать для SHMMAX значение, численно равное объему физической памяти в системе. Однако минимально необходимое в системах x86 значение равно 268435456 (256 Мбайт), а в 64-битных системах - 1073741824 (1 Гбайт).
    • Следующий раздел описывает количество семафоров, доступных для операционной системы. Параметр ядра sem состоит из четырех элементов: SEMMSL, SEMMNS, SEMOPM и SEMMNI. Значение SEMMNS равно произведению SEMMSL на SEMMNI. Для менеджера баз данных требуется соответственным образом увеличить число массивов (SEMMNI). Обычно значение SEMMNI должно быть вдвое больше максимального разрешенного числа ожидаемых в системе агентов, умноженного на число логических разделов на компьютере сервера баз данных плюс число соединений локальных программ с компьютером сервера баз данных.
    • В третьем разделе указаны параметры сообщений в системе.
      • Параметр MSGMNI влияет на число агентов; которые можно запустить, параметр MSGMAX влияет на размер сообщения, которое можно поместить в очередь, а параметр MSGMNB влияет на размер очереди. Параметр MSGMNI влияет на число агентов; которые можно запустить, параметр MSGMAX влияет на размер сообщения, которое можно поместить в очередь, а параметр MSGMNB влияет на размер очереди.
      • Для параметра MSGMAX нужно задать значение 64 Кбайта (то есть 65536 байт), а значение MSGMNB нужно увеличить до 65536.
  3. Измените параметры ядра, которые требуется изменить, отредактировав файл /etc/sysctl.conf. Если этот файл не существует, создайте его.
    Ниже показаны примеры строк, которые нужно поместить в этот файл:
    #Пример для компьютера с 16 Гбайтами оперативной памяти:
    kernel.shmmni=4096
    kernel.shmmax=17179869184
    kernel.shmall=8388608
    #kernel.sem=<SEMMSL> <SEMMNS> <SEMOPM> <SEMMNI>
    kernel.sem=250 1024000 32 4096
    kernel.msgmni=16384
    kernel.msgmax=65536
    kernel.msgmnb=65536
  4. Введите команду sysctl с параметром -p, чтобы загрузить значения sysctl из файла по умолчанию /etc/sysctl.conf:
       sysctl -p
  5. Необязательно: Сделайте, чтобы эти изменения сохраняли силу после каждой перезагрузки:
    • (SUSE Linux) Сделайте активным файл boot.sysctl.
    • (Red Hat) Сценарий инициализации rc.sysinit автоматически читает файл /etc/sysctl.conf.