- 內核的 shmall 和 shmmax 參數
- 配置信號燈( semphore )的參數:
1.內核的 shmall 和 shmmax 參數
SHMMAX= 配置了最大的內存segment的大小 ------>這個設置的比SGA_MAX_SIZE大比較好。
SHMMIN= 最小的內存segment的大小
SHMMNI= 整個系統的內存segment的總個數
SHMSEG= 每個進程可以使用的內存segment的最大個數
SHMMIN= 最小的內存segment的大小
SHMMNI= 整個系統的內存segment的總個數
SHMSEG= 每個進程可以使用的內存segment的最大個數
shmmax 是核心參數中最重要的參數之一,用於定義單個共享內存段的最大值。設置應該足夠大,能在一個共享內存段下容納下整個的 SGA , 設置的過低可能會導致需要創建多個共享內存段,這樣可能導致系統性能的下降。
至於導致系統下降的主要原因為在實例啟動以及 ServerProcess 創建的時候,多個小的共享內存段可能會導致當時輕微的系統性能的降低 ( 在啟動的時候需要去創建多個虛擬地址段,在進程創建的時候要讓進程對多個段進行“識別”,會有一些影響 ) ,但是其他時候都不會有影響。 官方建議值: 32 位 linux 系統:可取最大值為 4GB ( 4294967296bytes ) -1byte ,即 4294967295 。建議值為多於內存的一半,所以如果是 32 為系統,一般可取值為 4294967295 。 32 位系統對 SGA 大小有限制,所以 SGA 肯定可以包含在單個共享內存段中。 64 位 linux 系統:可取的最大值為物理內存值 -1byte ,建議值為多於物理內存的一半,一般取值大於 SGA_MAX_SIZE 即可,可以取物理內存 -1byte 。 內存為 12G 時,該值為 12*1024*1024*1024-1 = 12884901887 內存為 16G 時,該值為 16*1024*1024*1024-1 = 17179869183 內存為 32G 時,該值為 32*1024*1024*1024-1 = 34359738367 內存為 64G 時,該值為 64*1024*1024*1024-1 = 68719476735 內存為 128G 時,該值為 128*1024*1024*1024-1 = 137438953471
kernel.shmall : 該參數控制可以使用的共享內存的總頁數。 Linux 共享內存頁大小為 4KB, 共享內存段的大小都是共享內存頁大小的整數倍。 一個共享內存段的最大大小是 16G ,那么需要共享內存頁數是 16GB/4KB==4194304 (頁), 當內存為 12G 時, kernel.shmall = 3145728 當內存為 16G 時, kernel.shmall = 4194304 當內次為 32G 時, kernel.shmall = 8388608 當內存為 64G 時, kernel.shmall = 16777216 當內存為 128G 時, kernel.shmall = 33554432
2.配置信號燈( semphore )的參數:
SEMMSL= 每個semphore set里面的semphore數量 -----> 這個設置大於你的process的個數吧,否則你不得不分多個semphore set,好像有process+n之說,我忘了n是幾了。
SEMMNI= 整個系統的semphore set總數
SEMMNS=整個系統的semphore總數
SEMMNI= 整個系統的semphore set總數
SEMMNS=整個系統的semphore總數
shmall 是全部允許使用的共享內存大小,shmmax 是單個段允許使用的大小。這兩個可以設置為內存的 90%。例如 16G 內存,16*1024*1024*1024*90% = 15461882265,shmall 的大小為 15461882265/4k(getconf PAGESIZE可得到) = 3774873。
修改 /etc/sysctl.conf
kernel.shmmax=15461882265 kernel.shmall=3774873 kernel.msgmax=65535 kernel.msgmnb=65535
可以使用 ipcs -l 看結果。ipcs -u 可以看到實際使用的情況
Linux 共享內存限制設置
cat /proc/sys/kernel/shmmax sysctl -w kernel.shmmax =1073741824 cat /proc/sys/kernel/shmmni sysctl -w kernel.shmmni=4096 cat /proc/sys/kernel/shmall sysctl -w kernel.shmall=2097152