
物理メモリ (RAM) が 12 GB 割り当てられた Linux サーバー上で実行される Java アプリケーションがあり、一定期間にわたる通常の使用率は以下のように表示されます。
sys> free -h
total used free shared buff/cache available
Mem: 11G 7.8G 1.6G 9.0M 2.2G 3.5G
Swap: 0B 0B 0B
最近、アプリケーションの負荷を増やすと、RAM の使用率がほぼいっぱいになり、使用可能なスペースが非常に少なくなり、速度が低下する可能性があることがわかりましたが、それでもアプリケーションは正常に動作し続けています。
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 134M 17M 411M 240M
Swap: 0B 0B 0B
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 145M 25M 373M 204M
Swap: 0B 0B 0B
私が参照したのはhttps://www.linuxatemyram.com/そこで以下の点が示唆されました。
警告表示実際にメモリ不足の状況を調べる必要がある場合があります。
- 使用可能なメモリ(または「空き + バッファ/キャッシュ」)がゼロに近い
- 使用されるスワップが増加または変動します。
- dmesg | grep oom-killer は OutOfMemory-killer が動作していることを示します
上記の点から、アプリケーションレベルではOOMの問題は見当たらず、スワップも無効になっています。そのため、この2つの点は無視します。気になるのは、利用可能なメモリがゼロ未満である点です。この点について説明が必要です。
質問:
- 使用可能数が 0 に近づいた場合、システムクラッシュが発生しますか?
- 使用可能なメモリが少なくなった場合、RAM をアップグレードする必要があるということですか?
- RAM メモリはどのような基準で割り当て/増加する必要がありますか?
- RAM メモリの割り当てに関して従う必要のある公式の推奨事項やガイドラインはありますか?
答え1
私の質問の1つに答えを得ることができた
使用可能数が 0 に近づいた場合、システムクラッシュが発生しますか?
私のサーバーの1つでテストしたところ、以下のようにメモリがほぼいっぱいになりました。
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 135M 25M 187M 45M
Swap: 0B 0B 0B
メモリ消費量が多いアプリケーションだけが、カーネルログで参照できるメモリ不足キラーによって強制終了されたことがわかります。
dmesg -e
[355623.918401] [21805] 553000 21805 69 21 2 0 0 rm
[355623.921381] Out of memory: Kill process 11465 (java) score 205 or sacrifice child
[355623.925379] Killed process 11465 (java), UID 553000, total-vm:6372028kB, anon-rss:2485580kB, file-rss:0kB, shmem-rss:0kB
https://www.kernel.org/doc/gorman/html/understand/understand016.html
Out Of Memory Killer (OOM Killer) は、システムのメモリが極端に不足しているときに Linux カーネルが使用するプロセスです。この状況は、Linux カーネルがプロセスに割り当てたメモリが多すぎるために発生します。... これは、実行中のプロセスが物理的に使用可能なメモリよりも多くのメモリを必要とすることを意味します。