httpd.exe占用100%CPU


    最近兩天被服務器上的apache搞得比較郁悶,每次開啟apache之后其后台進程httpd.exe總是占用100%,而且服務器本身能夠遠程桌面連接(說明網絡連接正常),但是卻無法上Internet網(可以使用IP上網,不能使用域名,即DNS出現問題),聯系了服務器托管商的IDC也沒能幫我們解決,只好自己動手,豐衣足食了。

        開始以為是端口問題,在apache打開時,在cmd下使用netstat -ano命令查看80是否被其他程序占用,但是根據PID顯示在(如下:1364)的卻是httpd.exe這個apache的后台線程占用着80端口。在將apache關閉之后再使用socket tool這個工具來測試80端口,這時80端口仍然可用。充分說明不是端口的問題,同時該端口也並未受到攻擊。




在網上也沒有能夠直接找到比較好的解決方法,后來在一個帖子上看到說,有可能是apache與其他的軟件沖突了(參考http://topic.csdn.net/u/20080331/14/9a86ed60-285e-49b9-a11c-f42810dc64a5.html的35樓)。如果是沖突,他會一直寫在apache/logs/ 目錄下的 error.log  錯誤日志。結果結果我看到我的error.log文件已經達到將近700M的大小,而且在開着apache的時候還在不斷增大。看到里面的錯誤是“(OS 10038)在一個非套接字上嘗試了一個操作。  : Child 8164: Encountered too many errors accepting client connections. Possible causes: dynamic address renewal, or incompatible VPN or firewall software. Try using the Win32DisableAcceptEx directive.”最后終於在網上找到了相應的解決方法(參考http://www.cnblogs.com/mr-jhao/articles/2240699.html)

(1)編輯httpd.conf

Win32DisableAcceptEx ##加入這行
ThreadsPerChild 
250
MaxRequestsPerChild 
0

重啟apache就解決了。

修改后還是不行,任然有錯誤記錄,CPU占用率是降低了,但是還是沒有恢復到原來的狀態.logs里面還是一直在記錄下面的錯誤報告。

(2)在win命令行cmd下,輸入以下命令

netsh winsock reset

        原因與winsock有關,這里主要是因為金山毒霸或者升級精靈修改了WINSOCK導致的。由於我電腦上也安裝了金山毒霸,而且最近幾天也升級過了,應該是同樣的問題。

使用此條命令恢復后,重啟電腦,這下Apache恢復當原先的良好狀態了。


-----------------------------------------------分割線---------------------------------------------------------

        對於上面加入httpd.conf中內容的解釋參考http://topic.csdn.net/u/20080331/14/9a86ed60-285e-49b9-a11c-f42810dc64a5.html的5樓的回答

        通常在“Windows任務管理器-進程”中可以看到兩個httpd.exe進程,一個是父進程、一個是子進程,父進程接到訪問請求后,將請求交由子進程處理。
        MaxRequestsPerChild這個指令設定一個獨立的子進程將能處理的請求數量。在處理“MaxRequestsPerChild 數字”個請求之后,子進程將會被父進程終止,這時候子進程占用的內存就會釋放,如果再有訪問請求,父進程會重新產生子進程進行處理。
       如果MaxRequestsPerChild缺省設為0(無限)或較大的數字(例如10000以上)可以使每個子進程處理更多的請求,不會因為不斷終止、啟動子進程降低訪問效率,但MaxRequestsPerChild設置為0時,如果占用了200~300M內存,即使負載下來時占用的內存也不會減少。內存較大的服務器可以設置為0或較大的數字。內存較小的服務器不妨設置成30、50、100,以防內存溢出。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM