我有一个 Debian Squeeze Lighttpd 服务器,上面有 PHP 和 MySQL,并且还安装了 XCache 和 Varnish。
我对此还很陌生,但已尽我所能解决这个问题,但没有成功。
无论我使用 Lighttpd 还是 Nginx 还是 XCache 还是 APC,问题仍然存在。
基本上,服务器可以完美地处理 PHP,RAM 看起来很好等等。然后突然它似乎停止了,PHP-CGI(或 FPM)进程不断堆积,耗尽了我所有的四核 CPU 能力,导致整个服务器几乎完全没有响应。
我的服务器上有 4 个网站,其中 3 个流量和需求都很低,而其中一个则非常密集和繁忙。所以几乎肯定是该网站导致了这个问题。但是,我们之前使用 cPanel 设置让该网站在此 (VPS) 服务器上运行(由于成本和 Debian 的偏好等原因,我现在想避免使用 cPanel)。
即使我从密集站点中删除所有 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 都运行良好,并且网站响应非常快,直到发生此锁定事件(可以预见的是,它总是会发生)。
答案1
已经修复...我认为!
解决方案是在 PHP 和 MySQL 中尽可能地实现超时。
我不会详细描述,但只要进行一些谷歌搜索,你就会找到它们。
它们包括:
mysql.connect_timeout(在 php.ini 中)
和
interactive_timeout(我设置为 10)
等待超时(我设置为20)
连接超时(我设置为20)
在 MySQL 的 my.cnf 文件中(我认为这就是 my.cnf 的全部内容)
这似乎可以控制一切并使服务器保持正常运行!
非常感谢你的帮助 :)
海浪