高并发, PHP 请求超时, CPU 占用上不去

2020-09-16 16:48:11 +08:00
 xiaoshouchen
服务器是阿里云的 8 核 8G
当有稍微高一点的并发时,PHP 就会超时 504 或者 502,然后 CPU 占用率在 30 %左右上不去
PHP 用的 Docker + Alpine-fpm 7.2

pm=static
pm.max_children=16

我尝试把 max_children 提高,CPU 占用率还是低
4554 次点击
所在节点    PHP
27 条回复
buliugu
2020-09-16 18:37:04 +08:00
建议上火焰图看看,凭空 profiling 都是扯淡
brader
2020-09-16 18:38:36 +08:00
16 核 16G
pm=static
pm.max_children=400
3 万多个用户
brader
2020-09-16 18:39:07 +08:00
服务已经稳定跑了 1 年了。
xiaoshouchen
2020-09-16 18:40:55 +08:00
@buliugu 抱歉,不太清楚火焰图是什么,如何查看,可否指教?
wangritian
2020-09-16 19:29:49 +08:00
fpm 是多进程单线程的吧,你的业务代码应该是有高耗时 IO,导致 16 个 fpm 进程全被阻塞,新请求进不来,不改架构的优化方法:
磁盘 IO:开启 opcache 缓存,尤其是各种框架一堆 php 文件的,别每个请求都挨个读一遍;如果业务有处理大量小文件的,看能不能合并一个大文件
网络 IO:mysql/redis 机器放本机或局域网,索引优化好,text 字段没用到别查;第三方功能 api 换延迟低的
但治标不治本,进程模型处理 IO 任务很不科学,应该换多线程或协程,比如 swoole/workerman
sutex777
2020-09-16 19:44:48 +08:00
炫富啊。。多少流量啊
Aliencn
2020-09-17 10:58:50 +08:00
@xiaoshouchen 这个值调多大主要是看业务特性,没有一个明确的定义。

既然你有调整过还会出现 5XX 的错误,建议你把 PHP 相关的日志都打印出来。看在出现 5XX 错误的时候 PHP 都报什么错误。即使是进程数不够日志里也会有相关信息输出的。

如果没有产生错误的话那就看看 PHP 前端的程序(比如 Nginx )有没有相关报错。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/707619

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX