Linux
sysctl.conf 中的 shmmax 設置未生效
我們正在執行 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。我已嘗試重新啟動系統,但仍然無法正常工作。有什麼想法可以使此設置生效嗎?
好吧,我想我知道為什麼了。這是 32 位版本的 Linux。在這種情況下,shmmax 的最大值似乎是 2GB。
首先,編輯 sysctl.conf 不會更改值,直到您重新啟動或執行:
sysctl -p
讓它重新載入值。
你提到這是一個 32 位的 Linux。這限制了您可以將 SHMMAX 設置到多大以及 Oracle SGA 可以有多大。有關您將在此處遇到的限制的更多資訊,請參閱在 FC2 上安裝 Oracle9i 。最大的普遍有用的設置是:
kernel.shmmax=2147483648
而且由於您嘗試的> 4GB,這就是它完全失敗的原因。
許多人似乎在此處使用一些指南或 Oracle 的設置建議作為一個幻數,而沒有真正考慮共享記憶體值是否真的對他們的系統有意義。我編寫了以下小腳本來為我在 Linux 上生成設置。正如所寫,它將共享記憶體塊限制為總 RAM 的 50%,這對於您的 Oracle 使用來說可能是輕量級的;很容易將其調整到更高的百分比。我討厭看到人們將此值設置為高於伺服器中的 RAM 量。
#!/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”,然後您就可以使用合理但安全的設置了。