让 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 计算资源又被浪费了,心有不甘。
请问各位高手大神有什么建议?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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。