我目前正在build立一个VPS(与VPS.NET),我将用它来主持一个博客和一些其他的东西。 我已经安装了nginx,并用php-fpm修补了php(5.2.8)。
所有的工作都非常棒(而且速度非常快),除了一个恼人的问题:因为现在网站没有其他的stream量,一段时间以后,它一直处于空闲状态,所有的php-cgi进程都会死掉。 只要我尝试访问网站,nginx返回一个不错的“502坏的网关”,并修复我必须手动重新启动php-fpm才能使网站再次工作。 这是为什么? 我已经看到这是一个普遍的问题,但是在空闲时间寻找解决办法的几天之后,我发现没有任何东西对我有效。
有什么build议么? 提前致谢
我运行一个非常类似的设置(nginx 0.7.61,php + fpm 5.2.10),我的PHP进程永远不会死,即使在闲置之后。
我的php-fpm.conf的进程控制位如下:
<value name="pm"> <value name="style">static</value> <value name="max_children">3</value> <value name="apache_like"> <value name="StartServers">20</value> <value name="MinSpareServers">5</value> <value name="MaxSpareServers">35</value> </value> </value> <value name="request_terminate_timeout">0s</value> <value name="request_slowlog_timeout">0s</value> <value name="slowlog">logs/slow.log</value> <value name="rlimit_files">1024</value> <value name="rlimit_core">0</value> <value name="chroot"></value> <value name="chdir"></value> <value name="catch_workers_output">yes</value> <value name="max_requests">500</value>
请注意,虽然我定义了类似apache的位(它们是默认configuration的一部分),但是由于我有PM样式的静态集,所以不会使用它们。
你可以在全局选项部分使用这个来打开日志到debugging级别:
<value name="log_level">debug</value>
看是否有报道说closures工人的理由。
如果这不起作用,locking沟渠修复将是一个像pingdom一样的服务每x分钟在您的网站上击中一个PHP,但是我对这个软件组合的经验并不表明这是应该要求的。
不知道PHP-FPM与fastcgi模式下的标准PHP有什么不同,但通常每个PHP进程在终止之前只能提供有限数量的请求。 这可以防止随着时间的推移内存泄漏。 这很好,除非你只有一个PHP进程,在这种情况下,它会运行直到它完成它的请求的配额,然后退出。 你应该看看你是否有一个单一的进程运行,或者如果你有几个。 如果你有几个,那么忽略这个。 如果您只有一个,那么在启动PHP之前,您需要确保已导出PHP_FCGI_CHILDREN环境variables。 PHP_FCGI_MAX_REQUESTS控制每个单独进程将运行的请求数量。