私は、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 のような大規模なオフサイト監視サービスは必要ありません。)