最近、ApacheがLinodeサーバーで異常な量のメモリ(以前より80MB多い)を使用していることに気付きました。Apache2を再起動すると問題が解決するようです。
サーバー上でmysqlとTomcatだけでなく、Apache上でSVNを実行していますが、どちらも問題ではないようです。 Apacheがメモリを失っている場所をデバッグするにはどうすればよいですか? SVNを除いて、実際にはwordpressブログのみをホストしているため、リークが発生している可能性がある場所がわかりません。ubuntu8.04リポジトリからのデフォルトインストールを使用しました。
何か助けはありますか?
Apacheのメモリ処理のニュアンスは、常にますます多くのメモリを消費しているように見えることを意味します-_prefork.c
_(私はあなたがそうだと思います)を使用すると、topのVIRT値はしばしば高くなります:
_ PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10385 Apache 15 0 376m 48m 3932 R 20.3 1.2 0:01.34 httpd
10423 Apache 16 0 376m 46m 4576 S 15.0 1.2 0:01.09 httpd
10153 Apache 15 0 337m 61m 4672 S 11.6 1.6 0:03.94 httpd
10419 Apache 15 0 383m 54m 4696 S 11.6 1.4 0:01.00 httpd
_
監視する値はRESです。これは子スレッドが消費したメモリの最大量のサイズです(私の場合、PHPはそのスレッドの一部として実行されるため、「ライブラリとデータがロードされると、スレッドは割り当てられたメモリを解放しません。ただし、Apacheプロセスがmaxrequestsの後にスレッドを強制終了すると、
_<IfModule prefork.c>
MaxRequestsPerChild 1000
_
スレッドはネイティブのメモリ消費量に戻ります。これはApacheの再起動と同じ効果ですが、再起動にはサービスの一時的な損失が伴います(ポート80でリッスンしているものはありません)が、MaxRequestsPerChildは子スレッドのみを制御し、ポート80(またはポート80でリッスンしているサービスが存在することを保証します)聴く)。
Apacheの総メモリ使用量を減らすには、必要なApacheモジュールのみをロードしていることを確認し、非常に大きなPHPスクリプト(ini_set('memory_limit', '128M');
その後、データを再帰的にロードする間、Apacheのスレッドを監視します。次に、実際の使用中に、Apache MaxRequestsPerChild
が妥当なレベルで表示されるまでRES
値を下げます。これは下げるだけであることを忘れないでください。子スレッドがその「ライフ」の開始時に大きなスクリプトを実行する可能性(これを実行する子が多いほど、Apacheが使用するメモリの合計が多くなります)。
ここにいくつかの有用なパラメータ調整の記事があります: