top
バッチモードで実行してメモリサイズを定期的に報告することにより、状況が悪化したときに誰がメモリを使用しているかを確認できます。runingてsar
バッチモードでは、メモリの使用、および関連するI / O上でいくつかの良い診断を与える必要があります。munin
システムを監視するために実行すると、どのメモリが使用されているかについての詳細なグラフが表示されます。これは大いに役立つかもしれません。
limits.confを使用して、プログラムの最大コアサイズを制限できます。適切に設定すると、メモリをリークしているプログラムがすべて終了します。これはpam_limitsモジュールで機能します。ulimits
コマンドで制限を設定することもできます。
大量のメモリを使用する可能性のあるプログラムをいくつか実行しています。あなたが見ることができるいくつかのものが含まれます。
- 不十分にプログラムされたアプリケーションは、
apache2
メモリリークを引き起こす可能性があります。これが発生すると、メモリサイズが増加するはずです。MaxRequestsPerChild
100程度に設定することにより、一定の使用回数の後にapache2を調整して子供をリサイクルできます。これで問題が解決した場合は、リークを解決する必要があります。最初にこれを見ます。
- MySQLはデータをメモリにロードしようとする場合があります。メモリに大量のデータがある場合、これによりスラッシングが発生する可能性がありますが、見ているほど劇的ではありません。
- 大きな
tmpfs
ファイルシステムがマウントされている場合、使用時にファイルが削除されないとメモリがリークする可能性があります。また、長時間の大きなファイルも問題になる可能性があります。
- 問題がほぼ同じ時刻に発生する場合は、メモリをリークしているスケジュールプログラムがある可能性があります。
- 共有メモリを割り当てるが、終了する前にそれを解放しないプログラムがある場合、比較的目に見えないメモリリークが発生します。共有メモリがメモリ内でロックされている場合、強制的にスワップされる可能性があります。通常、使用可能な共有メモリの量は比較的制限されています。
- liquidsoap + icecastバンドルでは、メモリを使用するバッファリングの問題が発生する可能性があります。私はこの組み合わせを使用していないので、これがどのように表示されるかわかりません。
通常のメモリ使用量:空きメモリはあまり必要なものではありません。システムが長時間稼働していて、空きメモリがたくさんある場合は、何かがおかしいです。ファイルを読み書きするたびに、ブロックはバッファキャッシュに入れられます。これにより、空きメモリが減少します。これは良いことです。システムは、他の場所でメモリを探すことなく、いくつかのプログラムを起動するのに十分な空き領域を保持します。多くのプログラムは迅速に実行されるため、実行を停止すると、メモリは空きプールに戻されます。
バッファキャッシュにあるファイルを読み取る場合、ディスクアクセスは不要であり、読み取りはバッファキャッシュから解決されます。書き込みも同様のメカニズムを使用します。システムにメモリが必要な場合、バッファキャッシュは最初に使用される場所の1つです。ほとんどのバッファはすぐに解放できます。
メモリリークが発生すると、空きメモリとバッファの両方が縮小し始めます。リークしたメモリは最終的にスワップ領域に移動する必要があるため、これは依然として重大な問題ではありません。スワップ領域がいっぱいになるまでシステムは正常に動作し、残りの空き領域をプログラムが開始できないポイントまで引き下げます。通常、少量のスワップ領域が使用される場合があります。