Мы запускаем 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, так как ни одной из них я не делал.