php-fpm占用CPU太高

发布于 2021-11-26 13:27:32 字数 175 浏览 800 评论 17

服务器是双核的4GB内存,搭建的是LNMP的环境,在用 webbench做压力测试的时候100的并发,就变成这样了,是不是服务器配置不行啊

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(17

永不分离 2021-12-03 06:05:05

看下是不是mysql链接数少了。处理不过来了

霞映澄塘 2021-12-03 06:05:03

回复
感谢为了小弟这问题,麻烦你们了,其实现实的问题是LNMP架构是在一台服务器上,大量的访问(每秒100的量),本来就是动态网站,最后就是调用了PHP去解析,导致PHP占用cpu和内存资源,最后网站打不开了,这个有什么好办法啊,因为session文件是放在mysql数据库的,大量访问导致数据库单表太大,最后mysql和php-fpm占用CPU,死机了

眉黛浅 2021-12-03 06:05:03

回复
感谢为了小弟这问题,麻烦你们了,其实现实的问题是LNMP架构是在一台服务器上,大量的访问(每秒100的量),本来就是动态网站,最后就是调用了PHP去解析,导致PHP占用cpu和内存资源,最后网站打不开了,这个有什么好办法啊,因为session文件是放在mysql数据库的,大量访问导致数据库单表太大,最后mysql和php-fpm占用CPU,死机了

眉黛浅 2021-12-03 06:05:02

回复
你看nginx日志,算下每个PHP应答时间是多少。2U估计撑不住100并发。我觉得这个很正常。找个合理点的目标吧。

恋你朝朝暮暮 2021-12-03 06:05:02

回复
一个cpu一个时间点只能处理一个进程,他有两个CPU,一秒压100个进来,就算不用mysql也会堆积。这是运算能力限制在那里。mysql并发写在顶部会不会有锁争用我还没了解。但绝对不是造成楼主堵塞的原因

顾挽 2021-12-03 06:05:00

回复
确实是不懂装懂秀下限

瑾兮 2021-12-03 06:04:55

引用来自“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的架构

天涯离梦残月幽梦 2021-12-03 06:04:45

我也知道啊,主要是想优化一下,尽量不让服务器因为CPU占用高导致网页打不开啊

谢绝鈎搭 2021-12-03 06:03:30

唉,说多了都是眼泪,公司不愿意加服务器,苦逼的都是我们这些人啊

凡尘雨 2021-12-03 06:03:26

回复
等你公司能有100并发的访问量再说吧

悸初 2021-12-03 06:02:29

你对2核4G的性能要求太高了,不仅跑php还跑mysql

顾挽 2021-12-03 06:01:09

抛开那些你改变不了的条件不谈(比如增加机器配置,数据库独立部署等),这里给几个建议:

1、检查下php是否开启了opcache缓存

2、strace工具调试一下看瓶颈在哪里,比如使用某些框架,需要动态的打开文件,框架是否支持优化的方案,到框架的官网上去看下,一般都有,另外框架一般默认加载了大而全的东西,检查下如果不是需要的是否可不加载。

3、尝试去优化下业务吧,能用memcached替换mysql的业务,用memcached替换吧。

惜醉颜 2021-12-03 05:55:34

php-fpm的进程管理模式是采用的动态管理,当时的想法是php进程处理完了就会自动释放资源

苍暮颜 2021-12-03 05:51:30

回复
所以,你应该使用static模式,并且减少进程数量,比如可以设置4个PHP-FPM工作进程。打个比方,你才2台机器,你请100个工人来也轮流操作不仅不能提升效率,反而影响效率。

梅窗月明清似水 2021-12-03 04:28:30

top显示的是子进程 并发一上来子进程多 有什么奇怪的

做个少女永远怀春 2021-12-03 04:12:27

回复
你的想法很好 但最好不要用 PHP-FPM 这样东西来跑重负载。

吃颗糖壮壮胆 2021-12-03 03:30:22

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的架构

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文