PHP 程序不斷壓倒我的伺服器,佔用 CPU 並使其鎖定 :(
我有一個帶有 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 部分:
(這裡推薦的最大請求設置為 500 ,不是 100% 確定它是正確的,但當然問題也發生在 nginx 中!)
這是我的 php.ini:
和我的 MySQL my.cnf:
有什麼想法嗎?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 的全部內容)
這似乎可以控制事物並保持伺服器正常執行!
非常感謝您的所有幫助:)
海浪