【发布时间】:2015-03-17 22:56:35
【问题描述】:
我有一个 Nginx + PHP5-FPM 服务器,几乎没有高流量网站。
根据我对 PHP5-FPM 池配置的理解,我了解到:
static = 可用于立即创建 N 个子进程,因此它们不需要打开/重新打开,它们已经打开,可以在需要时使用,否则它们处于“休眠”状态。
dynamic = 可用于打开有限数量的子进程并在达到限制时重新生成(最小/最大服务器)。
ondemand = 我指定要创建的最大子进程数,然后在需要时按需创建子进程,并在不再需要时关闭子进程,保持低内存使用但增加几毫秒的响应时间。
从我对高流量 WordPress 网站的测试中,我注意到:
如果我使用“静态”,网站肯定会更快,并且可以立即处理大量并发连接,但内存总是会增加其使用量,并且在 N 小时后它似乎几乎使用了可用的总 RAM。所以我必须使用 cronjob 定期(每 1 小时)使用 /etc/init.d/php5-fpm reload 重新加载 PHP5-FPM。
如果我使用“动态”,它会使用更少的 RAM,但在 N 个并发连接之后,经常会出现 502 错误(但可能我配置得不好)。
如果我使用“按需”,网站会稍微慢一些(例如 +50/100 毫秒的响应时间),但它可以处理所有高流量而无需使用太多 RAM。
所以我个人的结论是,就低/受控内存使用而言,“按需”确实是最好的方法,唯一的缺点是响应时间 +50/100 毫秒,但就我而言,它不是大问题。
我的假设正确吗?
【问题讨论】:
-
旁注:您可以设置
pm.max_requests让 PHP-FPM 在 X 请求后重新启动工作程序以解决内存泄漏而不使用 cron,是的,立即启动足够数量的工作程序的按需是好的。 -
“但是内存总是增加它的使用量”---你是怎么检查的?
-
André 我注意到即使将 pm.max_requests 设置为 50,内存也会增加(Wordpress + 自定义主题 + 20 个插件已加载)。
-
zerkms 我用“top”检查内存,在 /etc/init.d/php5-fpm 重启 30 分钟后,我看到内存增加了 5GB,几乎没有流量。我知道这个问题可能与 WP 插件占用内存或编码不佳有关,但我只是注意到,与静态相比,使用按需有助于保持内存使用率非常低。
-
@user2972081 最好为
pm.max_requests使用更大的数字,例如500或1000