![SHMMAX + 誤って正しく設定されなかったカーネルパラメータの影響](https://rvso.com/image/154472/SHMMAX%20%2B%20%E8%AA%A4%E3%81%A3%E3%81%A6%E6%AD%A3%E3%81%97%E3%81%8F%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%AE%E5%BD%B1%E9%9F%BF.png)
共有メモリについて少し
共有メモリを使用すると、プロセスは共有メモリ セグメントに共通の構造とデータを配置することで、それらにアクセスできます。プロセス間でデータが渡されるときにカーネルが関与しないため、これは利用可能なプロセス間通信の中で最も高速な形式です。実際、プロセス間でデータをコピーする必要はありません。
次のように、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 ビット システムの両方に適しています。
値はそのままで問題ありません。正しく設定されており、間違いはありません。