カーネルのshmallとshmmaxパラメータ

2658 ワード

変更/etc/sysctl.confの場合、注意しなければならないことはいくつかあります.
 
名前
説明
合理的に値を取る.
SHMMAX
最大共有メモリセグメントサイズ(バイト)
250kB + 8.2 kB * shared_buffers + 14.2 kB * max_connections無限大まで
SHMMIN
最小共有メモリセグメントサイズ(バイト)
1
SHMALL
使用可能な共有メモリの合計数(バイトまたはページ)
バイトならSHMMAXと同じです.ページの場合、ceil(SHMMAX/PAGE_SIZE)
SHMSEG
プロセスあたりの最大共有メモリセグメント数
1つのセグメントしか必要ありませんが、デフォルトはこれよりずっと高いです.
SHMMNI
システム範囲の最大共有メモリセグメント数
SHMSEGのように他のアプリケーションのための空間を加えます
SEMMNI
信号識別子の最小数(すなわち、スリーブ)
少なくともceil(max_connections/16)
SEMMNS
システム範囲の最大信号数
Ceil(max_connections/16)*17に他のアプリケーション用のスペースを追加
SEMMSL
1セットあたりの最小信号数
少なくとも17
SEMMAP
信号マッピングのレコード数
参照テキスト
SEMVMX
信号の最大値
少なくとも1000(デフォルトは通常32767ですが、強制されない限り変更しないでください)
 
shmallはすべて使用可能な共有メモリサイズです.
shmmaxは、メモリの90%に設定できる単一セグメントで使用可能なサイズです.
例えば16 Gメモリ、16*1024*1024*1024*1024*90%=15461882265、
shmallの大きさは15461882265/4 k(getconf PAGESIZEが入手可能)=3774873であった.
変更
#vi /etc/sysctl.conf
kernel.shmmax=15461882265
kernel.shmall=3774873
kernel.msgmax=65535
kernel.msgmnb=65535
  
#sudo sysctl -p

結果はipcs-lで見ることができます.ipcs-uは実際に使用されている状況を見ることができます.
#ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 15099494
max total shared memory (kbytes) = 15097856
min seg size (bytes) = 1
 
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
 
------ Messages: Limits --------
max queues system wide = 16
max size of message (bytes) = 8192
DEFAULT max size of queue (bytes) = 16384
 
kernel.shmmax       ;kernel.shmall     。  32   ,  =4k,   4096  。
kernel.shmall = 2097152     2097152*4k/1024/1024 = 8G            8G。
       
kernel.shmall = 2097152    ---  8G
kernel.shmall = 4194304    --- 16G
kernel.shmall = 8388608    --- 32G
kernel.shmall = 16777216    ---  64G