SHMMAX + 誤って正しく設定されなかったカーネルパラメータの影響

SHMMAX + 誤って正しく設定されなかったカーネルパラメータの影響

共有メモリについて少し

共有メモリを使用すると、プロセスは共有メモリ セグメントに共通の構造とデータを配置することで、それらにアクセスできます。プロセス間でデータが渡されるときにカーネルが関与しないため、これは利用可能なプロセス間通信の中で最も高速な形式です。実際、プロセス間でデータをコピーする必要はありません。

次のように、Redhatマシンの価値は非常に大きいことがわかります。

 cat /proc/sys/kernel/shmmax
 17446744003692774391

 sysctl -a | grep kernel.shmmax
 kernel.shmmax = 17446744003692774391

ギガに換算すると - 16248546544.17632

それは論理的でしょうか?ここで何か見逃しているのでしょうか?

マシンは64Gと16CPUを搭載しており、Hadoopクラスタで使用されている。

答え1

デフォルト値shmmax

#define SHMMAX (ULONG_MAX - (1UL << 24))

これは、オーバーフローのリスクを制限しながら、可能な限り大きくなるように選択された上限です。

SHMMNI、SHMMAX、および SHMALL は、sysctl によって変更できるデフォルトの上限です。SHMMAX および SHMALL の値は、"現在の制限を取得; X を追加; 制限を更新" という形式の操作によって制限を調整するときに、ユーザー空間がオーバーフローを引き起こすシナリオを助長することなく、可能な限り大きくなるように選択されています。したがって、SHMMAX および SHMALL をこれ以上大きくすることはお勧めしません。これらの制限は、32 ビット システムと 64 ビット システムの両方に適しています。

値はそのままで問題ありません。正しく設定されており、間違いはありません。

関連情報