高并发, PHP 请求超时, CPU 占用上不去 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
xiaoshouchen
V2EX    PHP

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

  •  1
     
  •   xiaoshouchen Sep 16, 2020 5234 views
    This topic created in 2052 days ago, the information mentioned may be changed or developed.
    服务器是阿里云的 8 核 8G
    当有稍微高一点的并发时,PHP 就会超时 504 或者 502,然后 CPU 占用率在 30 %左右上不去
    PHP 用的 Docker + Alpine-fpm 7.2

    pm=static
    pm.max_children=16

    我尝试把 max_children 提高,CPU 占用率还是低
    27 replies    2020-09-17 10:58:50 +08:00
    opengps
        1
    opengps  
       Sep 16, 2020
    你的问题不一定是配置问题,更像是单个站点下的某些资源占用较大成为瓶颈点了
    思路一:找出来代码操作资源使用的瓶颈点,代码优化,提高单站点负载能力
    思路二:如果不从优化资源占用代码角度讲的话,适合用多个站点来“负载均衡”
    ben1024
        2
    ben1024  
       Sep 16, 2020
    排查下有没有 磁盘 IO 或者 DB 操作限制
    qq1340691923
        3
    qq1340691923  
       Sep 16, 2020
    代码问题
    owenliang
        4
    owenliang  
       Sep 16, 2020
    空接口能跑上去,那就不是 PHP 配置问题了。
    wakzz
        5
    wakzz  
       Sep 16, 2020
    1. 输出红火图,查看应用 CPU 时间分片占用分布
    Aliencn
        6
    Aliencn  
       Sep 16, 2020
    pm.max_children=16
    这个值太小了吧。
    wakzz
        7
    wakzz  
       Sep 16, 2020
    2. 执行命令`dstat 1`,监控一下压测期间服务器的 CPU,IO,网络,中断的数据情况
    keepeye
        8
    keepeye  
       Sep 16, 2020
    php-fpm 进程数量太低了,加到 256

    你这个大概率是 io 瓶颈,跟 cpu 没啥关系,检查下你的代码吧,是否有远程调用或者数据库是否慢查询了。
    xiaoshouchen
        9
    xiaoshouchen  
    OP
       Sep 16, 2020
    @Aliencn 请问大概多大的比较合适,我曾经请教过别人,别人给我的回复时,CPU 切换本身也是消耗资源的,CPU 本身的限制在那,过多的提高 max_children 没有效果,反而有副作用( CPU 切换消耗资源)。
    sagaxu
        10
    sagaxu  
       Sep 16, 2020 via Android
    @xiaoshouchen 瞎 jb 扯,fpm 先加到 100 再说
    zibber
        11
    zibber  
       Sep 16, 2020
    8g 内存,把每个进程占用内存调小, max_children 调到 500 没问题
    xiaoshouchen
        12
    xiaoshouchen  
    OP
       Sep 16, 2020
    @keepeye 数据库用的阿里云的 RDS,没有查到慢查询的记录,而且 CPU 和内存的占用率也很低。除了微信分享、登录之外,基本上没有第三方的请求。磁盘 IO 占用率也不高买的是 IO 优化版的服务器。php-fpm 进程开太多,会不会导致 CPU 切换时间片本身消耗 CPU 资源。
    xiaoshouchen
        13
    xiaoshouchen  
    OP
       Sep 16, 2020
    @sagaxu 可否详细说明一下,FPM 进程数和配置的关系,”进程数过多,CPU 时间片切换消耗资源“这个说法的错误之处在什么地方呢?
    janxin
        14
    janxin  
       Sep 16, 2020
    @xiaoshouchen 你现在 CPU 的占用很低,没有到 max_children 敏感的阶段。还是需要加大的。其他的要看周边的数据影响,比如是否 DB 拖慢 etc
    justseemore
        15
    justseemore  
       Sep 16, 2020
    贴下 fpm 配置?
    GM
        16
    GM  
       Sep 16, 2020
    别听上面的人瞎扯,fpm 进程数量没必要太大的,50 个已经非常大了。
    每个 fpm 进程都要单独消耗一份内存,假设每个 50M 内存,100 个进程那就是 5G 内存,256 个那就是 12.5G 内存,别的程序还跑不跑了?
    keepeye
        17
    keepeye  
       Sep 16, 2020
    @GM 进程数量是动态的,max 只是一个理论最大值而已,而且也不是每个进程都一直占用 30M 内存不释放的
    keepeye
        18
    keepeye  
       Sep 16, 2020
    具体定个什么值还是要靠实际压测,总比一开始小气吧啦的好,爆内存了再说
    GM
        19
    GM  
       Sep 16, 2020
    @keepeye pm=static 的时候就不是动态了
    GM
        20
    GM  
       Sep 16, 2020
    @keepeye
    至于每个进程占多少,这个不好说,要看是什么框架,也要看具体业务代码怎么写。
    而且,框架本身也要占不少内存,如果是轻量级框架还好,占得少点,如果是 Laravel 之类重量级框架,那预留 50M 很正常的。
    buliugu
        21
    buliugu  
       Sep 16, 2020
    建议上火焰图看看,凭空 profiling 都是扯淡
    brader
        22
    brader  
       Sep 16, 2020
    16 核 16G
    pm=static
    pm.max_children=400
    3 万多个用户
    brader
        23
    brader  
       Sep 16, 2020
    服务已经稳定跑了 1 年了。
    xiaoshouchen
        24
    xiaoshouchen  
    OP
       Sep 16, 2020
    @buliugu 抱歉,不太清楚火焰图是什么,如何查看,可否指教?
    wangritian
        25
    wangritian  
       Sep 16, 2020
    fpm 是多进程单线程的吧,你的业务代码应该是有高耗时 IO,导致 16 个 fpm 进程全被阻塞,新请求进不来,不改架构的优化方法:
    磁盘 IO:开启 opcache 缓存,尤其是各种框架一堆 php 文件的,别每个请求都挨个读一遍;如果业务有处理大量小文件的,看能不能合并一个大文件
    网络 IO:mysql/redis 机器放本机或局域网,索引优化好,text 字段没用到别查;第三方功能 api 换延迟低的
    但治标不治本,进程模型处理 IO 任务很不科学,应该换多线程或协程,比如 swoole/workerman
    sutex777
        26
    sutex777  
       Sep 16, 2020
    炫富啊。。多少流量啊
    Aliencn
        27
    Aliencn  
       Sep 17, 2020
    @xiaoshouchen 这个值调多大主要是看业务特性,没有一个明确的定义。

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

    如果没有产生错误的话那就看看 PHP 前端的程序(比如 Nginx )有没有相关报错。
    About     Help     Advertise     Blog     API     FAQ     Solana     846 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 58ms UTC 20:42 PVG 04:42 LAX 13:42 JFK 16:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86