Настройка shmmax в sysctl.conf не действует
Мы запускаем обновление 6 RHEL 4, и я прохожу установку Oracle. В соответствии с Руководством по установке Oracle я пытаюсь обновить значение shmmax. Согласно руководству, я добавил следующую строку в /etc/sysctl.conf:
kernel.shmmax = 5319303168
Однако, когда я впоследствии ввожу следующую команду для проверки:
/sbin/sysctl -a | grep shm
Я вижу значение по-прежнему 1024335872. Если я выполню следующее:
cat /proc/sys/kernel/shmmax
Я также вижу значение 1024335872. Я попытался перезагрузить систему, но это все равно не работает. Любые идеи, как я могу заставить эту настройку вступить в силу?
3 ответа
ОК, думаю, я знаю почему. Это 32-битная версия Linux. Кажется, максимальное значение для shmmax в этом случае составляет 2 ГБ.
Прежде всего, редактирование 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", и вы получите разумную, но безопасную настройку.
Мои собранные вместе заметки для Oracle показывают те же инструкции. Единственное, что я делаю по-другому, это сначала запускаю echo 5319303168> / proc / sys / kernel / shmmax. Я знаю, что это работающий конфиг, и другие настройки должны были бы пережить перезагрузку.
Какая версия Oracle? Я следую инструкциям 9i и не уверен, что я запускаю версию 9i на 4.x. Я бы посмотрел на 10g установки, так как я не сделал ни одной из них.