参照
要約
overcommit_memory 値の意味
0 (kernel > 2.4) default
最近のLinuxのデフォルト。きっちり裏取りはしないが、今までの経験から、メモリが確保出来そうか否かを判断する。つまり、そこそこ賢く、そこそこ早い、OOM Killerは出る
パフォーマンス: 中
堅牢性: 中
1 (kernel < 2.0 default)
何にもovercommitを制御しない、最もアホなモード。アホ故に早い
OOM Killerは一番でる。
パフォーマンス: 高
堅牢性: 低
redis専用サーバとかなら、最善。redisもサーバ兼用とかだと、0 の方がいい
2 (kernel > 2.6)
overcommitをシビアに管理する。overcommit_ratio
で制御する。
swap = 0 なら ratio=100にしとけ。
Linuxのメモリ管理の性質上、 SWAPを大量に積んでおく必要がある
一番賢いが、一番遅い、OOM Killerは 出ない 理論上は一応出る(稀ではあるが)。
パフォーマンス: 低
堅牢性: 高
1サーバに相乗りなどは、バックエンドが殺されないように 2にするのがいいと思う。
overcommit_memory = 2 の運用
とりあえず /proc/meminfo の下記を見る
CommitLimit: 1839215 kB
Committed_AS: 1089466 kB
CommitLimit
の値は、 SWAP + RAM * overcommit_ratio の値となる。
各プロセスは実際に利用するよりも遥かに大きいメモリ容量をOSに要求する、それを許さないのが overcommit=2
よって Commited_AS != 実メモリ利用量なので、 ratio=100にしても 実メモリの 150%ぐらいのSWAPを積んだ方がいい。
SWAPの容量は、実メモリの利用比率とCommitの利用比率が近い値にするのがいいと思う。
CommitLinit の空きは監視したほうがいい。