让 PHP-FPM 消耗内存还是消耗 CPU, 这是个问题...

在优化 PHP-FPM 的时候,通常都有两种思路:

  • 根据 CPU 核数来设置 pm.max_children, 如 核数 * 2 + 2,在同等压力的情况下,会将 CPU 拉得很高,超过70%,但内存几乎没有波动。
  • 根据 内存数 来设置 pm.max_children, 如 30M/每进程 * 100个 = 3GB 内存占用,这种情况下,内存会拉得较很高,且随着回收周期规律性波动,但 CPU 几乎没什么太多波动,基本上 10-40%。

从 ab -c 500 -n 100000 的测试结果来看,根据 CPU 核数来配置会快一点点,不是特别明显。如果用内存数来配置,感觉上 CPU 计算资源又被浪费了,心有不甘。

请问各位高手大神有什么建议?

阅读 5.6k
1 个回答

max_children 设置为 cpu * 2 + 2 肯定是太小的。配合你的每秒500次请求,假设cpu = 4,那么最多就10个fpm进程被创建,100ms一次请求的话,每秒差不多可以接收 (1000/100) * 10 = 100次请求。多出来的要等待master创建进程,自然cpu就上去了。

个人建议根据每天的平均访问量去设置pm.start_servers,至于max_children不能超过总内存的三分之二。如果是专用于web访问的服务器,建议 pm=static。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进