Apache が定期的にハングする

Apache が定期的にハングする

私は、Rackspace がホストする小さな Debian VPS で個人用 Web サーバーを運用しています。ここ数週間、Apache (2.2.16 を実行しています) が無期限にハングしているように見えることが何度かありました。Apache を再起動すると、/etc/init.d/apache2 restart再び同じことが起こるまで問題は解決します。このため、DNS または仮想ディレクトリ構成の問題ではないことはほぼ確実です (この問題が発生するずっと前から、どちらも変更されていません)。

場合によっては、PHP と MySQL を含む動的ページのみが影響を受け、静的 HTML ページの読み込みが遅くなることがあります。また、Apache を再起動するまですべてのページが無期限にハングすることもあります。Chrome でタブを開いている場合、しばらくハングすると ERR_CONNECTION_ABORTED でエラーが発生することがあります。Apache を再起動すると、ERR_CONNECTION_RESET で読み込みが停止します。

存在しないファイルを探している Web クローラー以外には何も入っていません/var/log/apache2/error.log。最初は RAM の問題だと思いました (256 MB、私はケチですが、トラフィックは 1 日あたり数百ヒット程度で、ほとんどが Web クローラーです)。しかし、スワップは満杯にはほど遠く、Apache プロセスはアイドル状態であり、空きメモリはほとんどありませんが、Apache を再起動して数ページをロードした後はほぼ同じです。動作しているときのパフォーマンスは許容範囲内ですが、数日の稼働後にハングする原因を突き止める必要があります。

MaxClients を減らして MaxRequestsPerChild を増やしてみましたが、効果はありませんでした。

 <IfModule mpm_prefork_module>
     StartServers          2
-    MinSpareServers       2
-    MaxSpareServers       4
-    MaxClients           10
-    MaxRequestsPerChild 200
+    MinSpareServers       1
+    MaxSpareServers       2
+    MaxClients            4
+    MaxRequestsPerChild 2000
 </IfModule>

(これらの設定は、古いものと新しいものの両方があり、グーグルで検索した結果に基づいています。合理的な構成に関する矛盾する情報が大量に存在します。)

何が起こっているのかをどうやって把握すればよいのでしょうか? 潜在的なデッドロックを探すのに適した場所はどこですか?

補足質問: VPS 自体は問題ないのですが、Apache が不正動作を始めたときに警告を発する、ローカルで実行できる cronjob はありますか? (Pingdom のような大規模なオフサイト監視サービスは必要ありません。)

関連情報