システムで利用可能な共有メモリのサイズを計算するにはどうすればよいでしょうか

システムで利用可能な共有メモリのサイズを計算するにはどうすればよいでしょうか

によるRHEL ドキュメントの場合、システム上で使用可能な共有メモリの合計量は に等しくなりますshmall*PAGE_SIZE

RHEL 6のインストールが完了すると、shmallカーネルパラメータの値はデフォルトで4294967296になります。これは、システム全体で使用できる共有メモリページの合計量が4294967296で、ページサイズが4096 Bであることを意味します。したがって、式に基づくと、共有メモリのサイズは次のようになります。

4294967296*4096/1024/1024/1024/1024 = 16 TB

...これは、オペレーティング システムが持つ RAM のサイズ (8 GB) よりもはるかに大きいです。OS はどのようにして 16 TB の共有メモリを見つけて割り当てることができるのでしょうか?

では、 のサイズは/dev/shm共有メモリのサイズと同じですか? そうでない場合、共有メモリの実際のサイズを取得するにはどうすればよいでしょうか?

答え1

計算は正しいです。shmall は、使用可能な仮想メモリよりも高く設定できます。すべてを使用しようとすると、shmall を超えたためではなく、他の理由で失敗します。

ちなみに、これらの IPC 制限を見つけるためのコマンドもあります。

ipcs -l
lsipc  # util-linux>=2.27

Linuxでは仮想メモリもデフォルトで無制限であり、RAM+スワップよりも大きいことに注意してください。

https://serverfault.com/questions/606185/how-does-vm-overcommit-memory-work

OOM キラーはどのプロセスを最初に終了するかをどのように決定しますか?

一方、制限プロセスごとに使用する仮想メモリはulimt -vカーネルに/proc/sys/kernel/shmallも影響しません。

関連情報