一部の子プロセスを削除するoomkillerに関連しているように見える間欠的な問題が発生しますが、その理由を理解できません。
sysctlを介してすべてのoomkillerアクティビティを抑制する便利な方法はありますか?
これがうまくいくはずであるといういくつかのガイドラインを見つけましたが、私には存在しません。
sysctl -w memory.oom_control=1
sysctl -w vm.oom-kill=0
私はまた人々がこれら2つを提案するのを見ましたが、オム・キラーは続きます。
sysctl vm.overcommit_memory=2
sysctl vm.overcommit_kbytes=0
答え1
使用できます/proc/sys/vm/overcommit_memory
(参照工程(5))、例えば
echo 2 > /proc/sys/vm/overcommit_memory
ルートとして無効にします。カーネルも参照してくださいdocs/vm/overcommit - 会計
(以前のカーネルを実行している場合は、アップグレードを検討してください。)
答え2
かなり古い質問ですが、今日本を読んでふと浮かんだ質問なのに…
sysctl -wmemory.oom_control=1
あなたはほとんどこれをしたくありません。ほとんどのLinuxディストリビューションではデフォルト設定が「0」になっています。これは、カーネルがオーバーコミットされたメモリの量を推測することを意味します。 「1」は常に過度に使用されることを意味する。 (ほぼ)安定したコンピュータでOOMエラーが発生した場合は、次の値を使用する必要があります。2。これは乱用を無効にしません!これは単にカーネルがプログラムに割り当てるメモリ量の制限を設定します。この制限はovercommit_ratio
またはによって決定されますovercommit_kbytes
。残念ながらこのファイルこれらのそれぞれの中で矛盾する価値を解決する方法の兆候はありません。しかし、あなたが見るとこれ...
1つを設定すると、もう1つは無効になります(読み取り時に0として表示されます)。
超過コミットの正しい値は、マシンの使用方法によって異なります。デフォルト(RAM + SWAP * 1.5 = 50)はデスクトップに適していますが、サーバーの場合はIMEがかなり高いです。サーバーを交換した場所に配置するのは一般的に悪いことです。
したがって、短いバージョンは次のようになります。
sysctl vm.overcommit_memory=2
sysctl vm.overcommit_ratio=20
...まだOOMキラーが表示されたら、より低い割合の値を試してください。