我已经安装了 ngix + php5-fpm。我对此很满意,但我无法优化 php5-fpm 以使其正常运行。每个修复的错误都会产生不同的错误。
首先,我采用了默认设置,但这导致了很多错误:
[04-Jun-2012 03:30:06] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
我增加了所有数字:
pm.max_children = 15
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 5
;pm.max_requests = 500
它导致了不同的错误:
[28-Feb-2013 07:45:06] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 18 idle, and 28 total children
我再次增加了所有数字:
pm.max_children = 70
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 35
;pm.max_requests = 500
这导致日志文件填满以下内容:
[28-Feb-2013 13:21:55] NOTICE: [pool www] child 21868 exited with code 0 after 4171.293476 seconds from start
[28-Feb-2013 13:21:55] NOTICE: [pool www] child 23962 started
我取消了注释:
pm.max_requests = 500
我也遇到了同样的错误,但不是那么频繁——每 5 分钟一次:
[28-Feb-2013 13:21:55] NOTICE: [pool www] child 21868 exited with code 0 after 4171.293476 seconds from start
[28-Feb-2013 13:21:55] NOTICE: [pool www] child 23962 started
我确实又增加了:
pm.max_requests = 1000
现在我每小时会出现 2-3 次此错误,但它仍然存在。
我会再次增加这个数字,但我觉得我的服务器(网站)的运行速度比托管在另一台服务器上的网站慢一点,设置如下:pm.max_children = 15,pm.start_servers = 5, pm.min_spare_servers = 3, pm.max_spare_servers = 5。(可能只是一个网络问题,我不知道)。
我在 Google 和这个网站上搜索过,知道如何计算 pm.max_children(这取决于 RAM)。但我找不到任何有关如何计算的信息:
pm.start_servers
pm.min_spare_servers
pm.max_spare_servers
pm.max_requests
有人可以帮忙吗?
uptime
13:55:39 up 16:40, 2 users, load average: 0.13, 0.14, 0.16
free -m
total used free shared buffers cached
Mem: 24101 3783 20318 0 151 3039
-/+ buffers/cache: 592 23509
Swap: 7811 0 7811
我没有对 nginx 配置文件进行任何更改。
答案1
正如日志中所说[NOTICE]
:这是信息性的,不是错误. 这些都已标记[ERROR]
。
简而言之:完全不用担心。这就像你的孩子告诉你他们关掉了厨房的灯。
如果它说[WARNING]
这是你应该注意的事情,就像你在第一次回应中通过增加阈值所做的那样。
答案2
将 php-fpm 切换到动态模式。这样 php-fpm 会自动决定何时生成新的子进程。一定有如果你正在使用和类型的操作码缓存,因为强制终止子进程会增加 PHP-APC 中的碎片