Linux

PHP 程序不斷壓倒我的伺服器,佔用 CPU 並使其鎖定 :(

  • April 6, 2013

我有一個帶有 PHP 和 MySQL 的 Debian Squeeze Lighttpd 伺服器,還設置了 XCache 和 Varnish。

我對此很陌生,但已盡我所能來解決這個問題,但沒有成功。

無論我使用 Lighttpd、Nginx、XCache 還是 APC,問題仍然存在。

基本上,伺服器在處理 PHP 時執行得非常好,RAM 看起來很好等等。然後突然間它似乎停止了,PHP-CGI(或 FPM)程序堆積起來,耗盡了我所有的四核 CPU 能力並導致整個伺服器幾乎完全沒有響應。

我的伺服器上有 4 個站點,其中 3 個站點的流量和需求都非常低,其中一個站點非常密集和繁忙。所以幾乎可以肯定是那個網站造成的。但是,我們之前使用 cPanel 設置讓該站點在此(VPS)伺服器上工作(由於成本和 Debian 的偏好等,我現在想避免這種情況。

即使我從密集站點中刪除所有 AJAX 並降低流量,它仍然會這樣做。

PHP、MySQL 或 lighttpd 日誌中也沒有報告明顯的錯誤(我讓它們都正常工作並定期檢查)。

這是我的 lighttpd.conf 的 PHP 部分:

http://pastebin.com/JwbFJ4YQ

(這裡推薦的最大請求設置為 500 ,不是 100% 確定它是正確的,但當然問題也發生在 nginx 中!)

這是我的 php.ini:

http://pastebin.com/XHH0YMTd

和我的 MySQL my.cnf:

http://pastebin.com/YPFjdfmf

有什麼想法嗎?XCache 只分配了 64mb,但這是他們建議開始使用的,而且它似乎從未在其管理 CP 中全部使用它(我注意到)。我認為 Varnish 和 XCache 都執行良好,並且站點響應非常快,直到發生此鎖定事件(可以預見,它總是如此)。

固定…我想!

解決方案是在 PHP 和 MySQL 中盡可能實現超時。

我不會詳細介紹,但做一些Google搜尋,你會找到它們。

它們是這樣的:

mysql.connect_timeout(在 php.ini 中)

interactive_timeout(我設置為 10)

wait_timeout(我設置為 20)

connect_timeout(我設置為 20)

在 MySQL 的 my.cnf 文件中(我認為這就是 my.cnf 的全部內容)

這似乎可以控制事物並保持伺服器正常執行!

非常感謝您的所有幫助:)

海浪

引用自:https://serverfault.com/questions/495883