私たちは常に実行しているシステムを構築しました。これはデータグラフを収集して表示します。長い間何も変更しないと、最終的にウンキラーイベントが発生します。これにより(oomスコアが高い)基本プロセスが終了し、ソフトウェアが再起動されます。
基本的な知識:システムはCentOS 6で、カーネルは2.6.32.26です。システムには2Gメモリと4Gスワップスペースがあります。アプリケーションはQt 3を含むC ++で書かれています。
毎分/proc/meminfoと/proc/slabinfoの内容を掻き取るためにcronジョブを設定しました。以下は、meminfoデータで見つかった最も興味深い兆候です(最新のoom-killerはチャートの右側にあります)。
SUnreclaimは、oom-killerが表示されるまで増加し続けます。 SUnreclaimの傾きの変化は、ディスプレイを切り替える位置です。
labinfoデータのいくつかの興味深い痕跡は次のとおりです。
私が見るには何かが漏れたり壊れていると思います。それが何であれ、私のプロセスが終了するとクリーンアップされるように見えますが、正直なところ、ここで何が起こっているのかわかりません。
何が漏れているのか、どうすればわかりますか?
更新:プロセスの初期にps出力で始まりました(ここでは表示されません)。私たちのすべてのプロセスのRSS値は「正常」レベルに急速に上昇し、同じままです。これが通常のメモリで実行されるプロセスであれば、助けは必要ありません。代わりに、スワップ不可能なメモリが割り当てられるようにする作業を行っています。
アップグレードのアドバイスによると、コードベースは古いライブラリへの依存関係が多すぎて、今では3シリーズカーネルに切り替えることはできません。
答え1
二つの質問をしました。
1)OOM Killerが実行されていてスワップがない場合、これはvm.swappiness設定に関連している可能性があります。 1に設定してみてください。古いハッキング可能性の高いカーネルでゼロに設定すると(私が覚えているように)、スワップは完全に無効になります。これはおそらく欲しいものではありません。
2)漏れを識別することは、増加するRSS値または他の指標を見つけるためにps auxwwを繰り返し実行するのと同じくらい簡単かもしれません。
これらすべての言葉は...
カーネルはとても古いです。 PHPは5.3に制限されています(ハッキングの可能性が高い)。 OpenSSLに問題があります。多くの関連ライブラリが非常に古く、メモリリークを引き起こす可能性があります。
最新リリースにアップグレードするのが最善です。簡単なアップグレードで、メモリリークを解決する最新のコードをインストールできます。