Назад | Перейти на главную страницу

настройка shmmax в sysctl.conf не действует

Мы запускаем RHEL 4 Update 6, и я выполняю установку Oracle. В соответствии с руководством по установке Oracle я пытаюсь обновить значение shmmax. Согласно руководству я добавил следующую строку в /etc/sysctl.conf:

 kernel.shmmax = 5319303168

Однако, когда я впоследствии ввожу следующую команду для проверки:

/sbin/sysctl -a | grep shm 

Я вижу, что значение по-прежнему 1024335872. Если я выполню следующее:

cat /proc/sys/kernel/shmmax

Я также вижу значение 1024335872. Я попытался перезагрузить систему, но это все равно не помогло. Есть идеи, как я могу заставить этот параметр вступить в силу?

Во-первых, редактирование sysctl.conf не изменяет значение, пока вы не перезагрузитесь или не выполните:

sysctl -p

Чтобы он перезагрузил значения.

Вы упомянули, что это 32-битный Linux. Это накладывает ограничения на то, насколько большим вы можете установить SHMMAX и насколько большим может быть Oracle SGA. Видеть Установка Oracle9i на FC2 для получения дополнительной информации об ограничениях, с которыми вы столкнетесь здесь. Самый большой обычно полезный параметр:

kernel.shmmax=2147483648

И поскольку тот, который вы пробовали, имеет размер> 4 ГБ, поэтому он вообще не удался.

Многие люди, кажется, используют какое-то руководство или предложения Oracle по настройке здесь в качестве магического числа, фактически не учитывая, действительно ли значения разделяемой памяти имеют смысл для их системы или нет. Я написал следующий небольшой скрипт для генерации настроек для меня в Linux. Как написано, он ограничивает блок разделяемой памяти до 50% от общего объема ОЗУ, что может быть мало для использования Oracle; легко настроить его на более высокий процент. Ненавижу, когда люди устанавливают это значение выше, чем объем оперативной памяти на их сервере.

#!/bin/bash
mem_bytes=`awk '/MemTotal:/ { printf "%0.f",$2 * 1024}' /proc/meminfo`
mem_max=`expr $mem_bytes / 2` 
page_size=`getconf PAGE_SIZE`
shmall=`expr $mem_bytes / $page_size`
echo \# Maximum shared segment size in bytes
echo kernel.shmmax = $mem_max
echo \# Maximum number of shared memory segments in pages
echo kernel.shmall = $shmall

Результат можно записать прямо в конец sysctl.conf, запустить "sysctl -p", и вы получите разумную, но безопасную настройку.

Хорошо, думаю, я знаю почему. Это 32-битная версия Linux. Кажется, максимальное значение для shmmax в этом случае составляет 2 ГБ.

Мои скомпонованные заметки для Oracle содержат те же инструкции. Единственное, что я делаю иначе, это сначала бегу эхо 5319303168> / proc / sys / kernel / shmmax. Я знаю, что это текущая конфигурация, и другие настройки позволяют ей выжить после перезагрузки.

Какая версия Oracle? Я следую своим инструкциям 9i и не уверен, что использую версию 9i на 4.x. Придется взглянуть на установки 10g, так как ни одной из них я не делал.