php-fpm占用CPU太高
服务器是双核的4GB内存,搭建的是LNMP的环境,在用 webbench做压力测试的时候100的并发,就变成这样了,是不是服务器配置不行啊
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
服务器是双核的4GB内存,搭建的是LNMP的环境,在用 webbench做压力测试的时候100的并发,就变成这样了,是不是服务器配置不行啊
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(17)
看下是不是mysql链接数少了。处理不过来了
回复
感谢为了小弟这问题,麻烦你们了,其实现实的问题是LNMP架构是在一台服务器上,大量的访问(每秒100的量),本来就是动态网站,最后就是调用了PHP去解析,导致PHP占用cpu和内存资源,最后网站打不开了,这个有什么好办法啊,因为session文件是放在mysql数据库的,大量访问导致数据库单表太大,最后mysql和php-fpm占用CPU,死机了
回复
感谢为了小弟这问题,麻烦你们了,其实现实的问题是LNMP架构是在一台服务器上,大量的访问(每秒100的量),本来就是动态网站,最后就是调用了PHP去解析,导致PHP占用cpu和内存资源,最后网站打不开了,这个有什么好办法啊,因为session文件是放在mysql数据库的,大量访问导致数据库单表太大,最后mysql和php-fpm占用CPU,死机了
回复
你看nginx日志,算下每个PHP应答时间是多少。2U估计撑不住100并发。我觉得这个很正常。找个合理点的目标吧。
回复
一个cpu一个时间点只能处理一个进程,他有两个CPU,一秒压100个进来,就算不用mysql也会堆积。这是运算能力限制在那里。mysql并发写在顶部会不会有锁争用我还没了解。但绝对不是造成楼主堵塞的原因
回复
确实是不懂装懂秀下限
引用来自“eechen”的评论
2个CPU核心开超过50多个PHP-FPM工作进程,CPU负载能不高吗?
比如4个PHP-FPM进程就能跑满4个核心的CPU,
那么你开40个PHP-FPM进程也没有任何意义,
只会占用更多的内存,造成更多的CPU上下文切换,性能反而更差.
对于一些存在阻塞的IO密集的操作,比如上传操作,可以设立单独的upload进程池,利用PHP-FPM提供的池的隔离性,分离计算密集和I/O密集操作,可以减少阻塞对整个PHP应用的影响.
[www]
listen = 127.0.0.1:9000
pm = static
pm.max_children = 4
[upload]
listen = 127.0.0.1:9001
pm = dynamic
pm.max_children = 8
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 4
具体看:
PHP FastCGI进程管理器PHP-FPM的架构
我也知道啊,主要是想优化一下,尽量不让服务器因为CPU占用高导致网页打不开啊
唉,说多了都是眼泪,公司不愿意加服务器,苦逼的都是我们这些人啊
回复
等你公司能有100并发的访问量再说吧
你对2核4G的性能要求太高了,不仅跑php还跑mysql
抛开那些你改变不了的条件不谈(比如增加机器配置,数据库独立部署等),这里给几个建议:
1、检查下php是否开启了opcache缓存
2、strace工具调试一下看瓶颈在哪里,比如使用某些框架,需要动态的打开文件,框架是否支持优化的方案,到框架的官网上去看下,一般都有,另外框架一般默认加载了大而全的东西,检查下如果不是需要的是否可不加载。
3、尝试去优化下业务吧,能用memcached替换mysql的业务,用memcached替换吧。
php-fpm的进程管理模式是采用的动态管理,当时的想法是php进程处理完了就会自动释放资源
回复
所以,你应该使用static模式,并且减少进程数量,比如可以设置4个PHP-FPM工作进程。打个比方,你才2台机器,你请100个工人来也轮流操作不仅不能提升效率,反而影响效率。
top显示的是子进程 并发一上来子进程多 有什么奇怪的
回复
你的想法很好 但最好不要用 PHP-FPM 这样东西来跑重负载。
2个CPU核心开超过50多个PHP-FPM工作进程,CPU负载能不高吗?
比如4个PHP-FPM进程就能跑满4个核心的CPU,
那么你开40个PHP-FPM进程也没有任何意义,
只会占用更多的内存,造成更多的CPU上下文切换,性能反而更差.
对于一些存在阻塞的IO密集的操作,比如上传操作,可以设立单独的upload进程池,利用PHP-FPM提供的池的隔离性,分离计算密集和I/O密集操作,可以减少阻塞对整个PHP应用的影响.
[www]
listen = 127.0.0.1:9000
pm = static
pm.max_children = 4
[upload]
listen = 127.0.0.1:9001
pm = dynamic
pm.max_children = 8
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 4
具体看:
PHP FastCGI进程管理器PHP-FPM的架构