如何調試無回應的 Web 伺服器

如何調試無回應的 Web 伺服器

我們有一個中型 EC2 實例運行 Ubuntu 12.04,透過 Apache 為大約十幾個小型 PHP Web 應用程式提供服務。

大約每隔一天,伺服器就會變得無回應,需要重新啟動執行個體才能恢復功能。在此期間,無法透過 HTTP 或 SSH 存取伺服器。

每次,最後記錄的 Apache 請求都是針對提供 4MB PDF 文件的 PHP 應用程式的。使用者代理程式始終將用戶端識別為 iPad(具體而言Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25),並且通常具有相同的 IP 位址,因此可能是相同使用者。

PHP 應用程式是一個遺留應用程序,在將檔案內容從磁碟回顯到客戶端之前會檢查一些權限。我們無法自行重現此問題,無論是使用 iPad 還是透過任何其他方式存取該檔案。

我們嘗試了一些監控解決方案,試圖更了解伺服器發生故障時發生的情況,但沒有一個解決方案顯示系統資源有任何問題。

我的問題是我們可以使用哪些策略來嘗試排除故障並希望解決此問題?

答案1

首先監視系統資源(CPU 負載、記憶體、磁碟),例如使用collectd 或sysstat。

請記住,我在這裡冒險,您所描述的問題可能是由於資源(最有可能是內存)耗盡而導致的,請運行egrep -i 'killed process' /var/log/*以查找 OOM 殺手調用。

系統日誌可能包含原因的痕跡(/var/log/messagesapache 的錯誤日誌)。

嘗試啟用更詳細的日誌,並在測試時密切注意您的系統。

相關內容