Liquidsoap + icecastバンドルとシンプルなウェブサイト(httpd + mysqld)を実行するサーバーがあります。特にない。 1日あたり約2000人以上の訪問者がおり、平均して同時に約50人が同時にインターネットにアクセスしています。
サーバーには8GB RAMがあります。時間が経つにつれ、サーバー上で何も新しいものが開始されず、新しいユーザーがいないにもかかわらず、空きメモリの量は常に減少します。ある時点でスワップが始まり、サーバーの負荷が上がり、応答しなくなります。通常、私はサーバーを再起動するだけです...
メモリリークを正確に検出するために何ができますか?私はtopを使用してリソースの使用状況を監視していますが、私が見る限り、何も役に立たないように見えます。
その多くのメモリを使用しているものを見つける方法はありますか?または何がディスクに激しくスワップし始めますか?サーバーを再起動せずにメモリを解放する方法はありますか?
バッチモードでtop
を実行して定期的にメモリサイズを報告することで、南に行ったときに誰がメモリを使用しているかを確認できます。バッチモードで sar
を実行すると、メモリの使用状況と関連するI/Oに関する適切な診断が得られます。 munin
を実行してシステムを監視すると、使用されているメモリの詳細を示すグラフが表示されます。これは非常に役立ちます。
Limits.confを使用して、プログラムの最大コアサイズを制限できます。適切に設定すると、メモリをリークしているすべてのプログラムが強制終了されます。これはpam_limitsモジュールで動作します。制限はulimits
コマンドでも設定できます。
大量のメモリを使用する可能性のあるいくつかのプログラムを実行しています。あなたが見ることができるいくつかのものが含まれます。
Apache2
で実行されているプログラムが不十分なアプリケーションは、メモリリークを引き起こす可能性があります。これが発生すると、メモリサイズが増加するはずです。 MaxRequestsPerChild
を100程度に設定することにより、Apache2を調整して、一定回数使用した後に子をリサイクルすることができます。これで問題が解決した場合は、リークを解決する必要があります。私はこれを最初に見ます。tmpfs
ファイルシステムをマウントしている場合、使用時にファイルを削除しないと、メモリリークが発生する可能性があります。長い寿命のファイルも問題になる可能性があります。通常のメモリ使用量:空きメモリは、多くのことを望むものではありません。システムが長時間稼働していて、空きメモリが多い場合は、何か問題があります。ファイルを読み書きするたびに、ブロックはバッファキャッシュに入れられます。これは空きメモリを減らし、良いことです。システムは、他の場所でメモリを探すことなく、いくつかのプログラムを開始するのに十分な空き領域を維持します。多くのプログラムはすぐに実行されるため、実行が停止すると、メモリは空きプールに戻されます。
バッファキャッシュ内のファイルを読み取る場合、ディスクアクセスは必要なく、読み取りはバッファキャッシュから解決されます。書き込みも同様のメカニズムを使用します。システムにメモリが必要な場合、バッファキャッシュは最初に使用される場所の1つです。ほとんどのバッファはすぐに解放できます。
メモリリークがある場合は、空きメモリとバッファの両方が縮小し始めます。リークしたメモリは最終的にスワップ領域に移動する必要があるため、これはまだ重大な問題ではありません。スワップスペースがいっぱいになるまでシステムは正常に動作し、残りの空きスペースをプログラムが開始できないポイントまで引き下げます。通常、少量のスワップ領域が使用される場合があります。
このコマンドを使用して、RAMの使用法に関するトップ10アプリケーションを表示できます。
ps -A --sort -rss -o comm,pmem | head -n 11
このコマンドは、多くのサブプロセスが生成されている場合に役立ちます。
ps auxf
これにより、どのプロセスが一緒に属しているかを確認できます。
アプリケーションの観点から実際にそのメモリを使用しているものはありません。
実際のメモリ使用量がプログラムの使用量に関してどのようになっているかをよりよく理解するには、ページキャッシュを表す 'cached'値を差し引く必要があります。
基本的にこれは優れたメモリ管理であり、理想的にはこれが理想です。
詳細については、こちらのリンクを参照してください: http://www.linuxatemyram.com/
私は本当にプロではありませんが、液体石鹸とアイスキャストはマルチメディア関連です。システムが解放されると、将来の使用に備えてメモリがキャッシュまたは占有されます。そして、トラフィックがその日の特定の時間に/一定期間にわたって増加した場合、スワッピングが開始されます。この時点で、リクエスト(コンテンツを表示するユーザー)が増加すると、必要なリソースは8GBを超えるRAMになります。