2011-07-24 10 views
3

OOM Killerが突然飛び出したときに、組み込みLinuxで数時間実行しているアプリケーションがあります。overcommit_memoryは2に設定されていますが、OOM Killerはストライクします

私はovercommit_memory=2overcommit_ratio=50を設定して、状況を引き起こし、可能性のあるリークをキャッチしますが、OOM Killerは依然として打ち切ります!

自分の設定がアクティブであることを確認するには、大きなmallocを要求しました。overcommit_memory=2を設定すると、実際にはゼロが返されます。

なぜ、OOMキラーがまだ始まっているのですか?問題の原因を調査するために何ができますか?

+0

私も(dmallocライブラリの助けを借りて)私はメモリを食べていないことを確認しました。 mallocログには、同じ量のメモリを取得して返すという一定のプロセスがあることが示されています。つまり、問題はないようです。 – leonp

+0

私が考えることのできるのは、おそらく 'malloc '以外のものがメモリを食べているということです。シーンや何かの後ろに何らかのバッファリングがあります。 'ps'はプロセスのメモリ使用量について何を言いますか? –

+1

ありがとう、トム!あなたは目標を打つ! 問題はLinux I/Oバッファの制御メカニズムにありました。待機バッファの割合を10に設定すると(デフォルトでは40)、これで問題は解決され、問題なく6日間稼働しました。 – leonp

答えて

0

したがって、質問に答えてください:sysctlを使ってVMの値を調整してください。必須パラメータはovercommit_ratioとdirty_ratioです。 UPDATE:2009年以降のLinuxバージョンでは、パーセント単位ではなくバイト単位でより正確なチューニングが行われます。

関連する問題