PHP5-FPM静态,动态或按需?

时间:2015-03-17 22:56:35

标签: php nginx

我有一个Nginx + PHP5-FPM服务器,几乎没有高流量网站。

根据我对PHP5-FPM池配置的理解,我理解:

static =可以用来立即创建N个子进程,因此它们不需要打开/重新打开,它们已经打开并且可以在需要时使用,否则它们就是“睡觉”#34;。

dynamic =可用于打开有限数量的子进程,然后在达到限制时重新生成(最小/最大服务器数)。

ondemand =我指定要创建的子进程的最大数量,然后在需要时按需创建子进程,在不再需要时关闭子进程,保持较低的内存使用量,但增加几毫秒的响应时间。 / p>

通过我在高流量WordPress网站上的测试,我注意到了:

如果我使用"静态",网站肯定更快,并且可以立即处理大量并发连接,但内存总是增加其使用量,并且在N小时后它似乎几乎使用了总数RAM可用。所以我必须定期(每1小时)使用一个cronjob重新加载PHP5-FPM并重新加载/etc/init.d/php5-fpm。

如果我使用"动态"它使用较少的RAM但在N个并发连接之后会出现频繁的502错误(但可能我配置得不好)。

如果我使用" ondemand"该网站速度稍慢(如+ 50 / 100ms响应时间),但它可以处理所有高流量而无需使用太多RAM。

所以我个人的结论是" ondemand"对于低/受控内存使用而言,它确实是最好的方法,唯一的缺点是响应时间为+50/100 ms,但在我看来这不是一个大问题。

我的假设是否正确?

2 个答案:

答案 0 :(得分:5)

你没有提到为什么你想要保持记忆力低。假设这台机器专门用于服务PHP-FPM,保持低内存并不能帮助你的应用程序。你有记忆,使用它。

因此,在这种情况下,"静态"是最好的选择,max_requests设置为可以控制内存泄漏(如果有的话)。

如果此机器与其他任务共享,则保持低内存是理想的选择。在这种情况下,"动态"是速度和内存使用之间的最佳折衷。

"按需"只有在很少使用PHP-FPM引擎并且机器的主要用途是其他用途时才是一个很好的选择。

答案 1 :(得分:3)

您可以通过检测子进程是否在一段确定的时间内死亡来配置PHP-FPM以自动重启。

在全局配置" php-fpm.conf"你可以设置重启PHP-FPM如果5个子进程在1分钟内死亡并等待10秒再发生。

// php-fpm.conf
emergency_restart_threshold = 5
emergency_restart_interval = 1m
process_control_timeout = 10s

所以你可以继续使用" dynamic"不使用cron。