3
我被困在試圖調試內存大小不斷增長的Apache進程中。我在帶有4GB內存的虛擬Ubuntu主機上運行帶有MPM Prefork的Apache 2.4.6,並使用mod_wsgi爲Django應用程序提供服務。該應用程序是沉重的AJAX調用和Apache每分鐘獲得300-1000個請求。下面是我所看到的:Apache進程空閒並進食內存
- 當我重新啓動Apache,第一子過程(與最低PID)將繼續增長其內存使用量,達到了在6或7分鐘的演出。所有其他Apache進程將保持每個進程的內存使用量在10MB-50MB之間。
- 令人煩惱的過程的CPU使用率將會波動,有時會非常低,其他時間徘徊在20%或有時更高。
- 麻煩的過程將無限期地運行,直到我重新啓動Apache。
- 我可以在我的Django日誌中看到,麻煩的進程正在向多個遠程IP提供一些請求(主要是我看到了我的應用不喜歡的URL捕獲異常的報告)。
- Apache錯誤日誌通常(但不總是)顯示PID的「IOError:無法寫入數據」,有時會跨越多個IP。
- Apache訪問日誌確實不是顯示與此PID完成關聯的任何請求。
- 除了'restart_syscall(< ...正在恢復中斷呼叫...「,即使在strace運行時我可以看到在我的應用程序日誌中提到PID時,運行PID的結果也不會得到結果
我試過設置MaxRequestsPerChild和MaxMemFree的低值既不似乎已產生任何影響。
那會是什麼或者我如何進一步調試?我看到的事實沒有strace的輸出使我我的應用程序有一個無限循環,如果是這樣的話,我怎麼能把PID追回到它執行的代碼路徑或啓動故障的請求中去?