Linux

sysctl.conf 中的 shmmax 設置未生效

  • August 28, 2009

我們正在執行 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”,然後您就可以使用合理但安全的設置了。

引用自:https://serverfault.com/questions/59824