PHP5-FPM静态、动态还是按需?

PHP5-FPM静态、动态还是按需?,php,nginx,Php,Nginx,我有一个Nginx+PHP5-FPM服务器,几乎没有高流量的网站 根据我对PHP5-FPM池配置的理解,我了解到: static=可用于立即创建N个子进程,这样它们就不需要打开/重新打开,它们已经打开并且可以在需要时使用,否则它们正在“休眠” dynamic=可用于打开有限数量的子进程,并在达到限制时重新生成(最小/最大服务器) ondemand=I指定要创建的最大子进程数,然后在需要时按需创建子进程,在不再需要时关闭子进程,以保持较低的内存使用率,但增加几毫秒的响应时间 从我对流量高的Word

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

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

static=可用于立即创建N个子进程,这样它们就不需要打开/重新打开,它们已经打开并且可以在需要时使用,否则它们正在“休眠”

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

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

从我对流量高的WordPress网站的测试中,我注意到:


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

如果我使用“动态”,它使用更少的RAM,但在N个并发连接之后,经常会出现502个错误(但可能我配置得不好)

如果我使用“ondemand”,站点会稍微慢一点(比如+50/100ms响应时间),但它可以在不使用太多RAM的情况下处理所有高流量

因此,我个人的结论是,“ondemand”确实是低/受控内存使用的最佳方法,唯一的缺点是响应时间为+50/100ms,但在我的情况下,这不是一个大问题


我的假设正确吗?

你没有提到为什么要保持低内存。假设这台机器专门为PHP-FPM服务,保持内存低对应用程序没有任何帮助。你有记忆,用它

因此,在这种情况下,“static”是最佳选择,将max_请求设置为可以控制内存泄漏(如果有)的值

如果这台机器与其他任务共享,那么保持低内存是理想的。在这种情况下,“动态”是速度和内存使用之间的最佳折衷方案


只有当PHP-FPM引擎很少使用并且机器的主要用途是其他东西时,“ondemand”才是一个不错的选择

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

在全局配置“php fpm.conf”中,如果5个子进程在1分钟内死亡并等待10秒,则可以设置重新启动php-fpm

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

因此,您可以继续使用“动态”而不使用cron。

侧注:您可以设置
pm.max_requests
让PHP-FPM在X个请求后重新启动工作线程,以解决内存泄漏问题,而不使用cron,并且如果需要立即启动足够数量的工作线程,则是的Ondemand是很好的。“但是内存总是会增加其使用量”---你是如何检查的?安德烈我注意到,即使pm.max_请求设置为50,内存也会增加(Wordpress+自定义主题+20个加载的插件)。zerkms我用“top”检查内存,在/etc/init.d/php5-fpm重新启动30分钟后,我看到内存增加了5GB,几乎没有流量。我知道这个问题可能与WP插件消耗内存或编码不当有关,但我只是注意到使用ondemand有助于保持与静态相比非常低的内存使用率。@user2972081最好为
pm.max_请求使用更大的数字,如
500
1000