による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
も影響しません。