【问题标题】:PHP5-FPM static, dynamic or on demand?PHP5-FPM 静态、动态还是按需?
【发布时间】: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 使用更大的数字,例如5001000

标签: php nginx


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2016-08-31
      • 2015-03-10
      • 2013-12-30
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多