我有一個小型 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。
/var/log/apache2/error.log
除了尋找不存在的文件的網路爬蟲之外,沒有其他任何事情。起初我以為這是 RAM 問題(256 MB,我很便宜,但流量約為每天幾百次點擊,主要是網絡爬蟲),但交換區遠未滿,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 本身很好,是否有一些我可以在本地運行的 cronjob,當 Apache 開始出現問題時會提醒我? (我不需要像 Pingdom 這樣的重量級異地監控服務。)