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

2022-08-30 23:40:37

我有一个Nginx + PHP5-FPM服务器,很少有高流量网站。

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

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

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

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

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

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

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

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

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

我的假设是否正确?


答案 1

你没有提到为什么你会想保持低内存。假设这台机器专门用于提供 PHP-FPM,那么保持低内存无论如何都不会对您的应用程序有所帮助。你有记忆,使用它。

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

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

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


答案 2

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

在全局配置“php-fpm.conf”中,如果5个子程序在1分钟内死亡,您可以设置为重新启动PHP-FPM,并等待10秒才能发生。

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

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


推荐