V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

PHP 服务的 CPU 状态怎么这样?

  •  
  •   hheedat · 3 天前 · 1294 次点击

    一个 PHP 服务,收到请求之后,直接 HTTP 请求第三方,拿到结果返回,整个过程是同步阻塞的;

    最近第三方延迟升高导致服务在高峰的时候 load 也升高了,类似这种瓶颈在网络 io 的服务,反映在 CPU 状态的什么地方呢?

    wa 和 iowait 只反映磁盘 io 对 load 的影响,网络 io 对 load 的影响反映在哪里(延迟升高导致 fpm 进程阻塞,是反映在 us 升高吗)?是否第三方接口的延迟变高会使这个服务机器的 us,si 变高?

    楼主基础知识不扎实,特来求教

    top - 12:57:45 up 201 days, 20:59,  1 user,  load average: 2.61, 2.70, 2.79
    Tasks: 451 total,   3 running, 448 sleeping,   0 stopped,   0 zombie
    %Cpu0  : 23.8 us,  5.8 sy,  0.0 ni, 67.3 id,  0.0 wa,  0.0 hi,  3.1 si,  0.0 st
    %Cpu1  : 22.0 us,  7.1 sy,  0.0 ni, 67.6 id,  0.0 wa,  0.0 hi,  3.4 si,  0.0 st
    %Cpu2  : 23.0 us,  6.8 sy,  0.0 ni, 67.2 id,  0.0 wa,  0.0 hi,  3.0 si,  0.0 st
    %Cpu3  : 16.0 us,  7.8 sy,  0.0 ni, 72.7 id,  0.0 wa,  0.0 hi,  3.4 si,  0.0 st
    %Cpu4  : 12.8 us,  5.2 sy,  0.0 ni, 79.9 id,  0.0 wa,  0.0 hi,  2.1 si,  0.0 st
    %Cpu5  : 12.8 us,  5.9 sy,  0.0 ni, 79.6 id,  0.0 wa,  0.0 hi,  1.7 si,  0.0 st
    %Cpu6  : 12.9 us,  5.8 sy,  0.0 ni, 78.6 id,  0.0 wa,  0.0 hi,  2.7 si,  0.0 st
    %Cpu7  : 14.2 us,  5.2 sy,  0.0 ni, 78.9 id,  0.0 wa,  0.0 hi,  1.7 si,  0.0 st
    KiB Mem : 32747872 total,   306700 free,  2588520 used, 29852652 buff/cache
    KiB Swap: 16516092 total, 16516092 free,        0 used. 27871856 avail Mem
    
    mpstat -P ALL 2
    
    Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    Average:     all   16.35    0.00    5.94    0.00    0.00    2.39    0.00    0.00    0.00   75.32
    Average:       0   22.90    0.00    6.06    0.00    0.00    2.77    0.00    0.00    0.00   68.28
    Average:       1   20.58    0.00    6.62    0.00    0.00    2.69    0.00    0.00    0.00   70.11
    Average:       2   19.65    0.00    6.17    0.00    0.00    2.98    0.00    0.00    0.00   71.19
    Average:       3   15.49    0.00    8.00    0.00    0.00    3.08    0.00    0.00    0.00   73.44
    Average:       4   12.87    0.00    5.56    0.00    0.00    1.85    0.00    0.00    0.00   79.71
    Average:       5   13.59    0.00    4.94    0.00    0.00    1.85    0.00    0.00    0.00   79.61
    Average:       6   12.38    0.00    4.75    0.00    0.00    1.96    0.00    0.00    0.00   80.91
    Average:       7   13.30    0.00    5.36    0.00    0.00    1.96    0.00    0.00    0.00   79.38
    

    8 回复  |  直到 2017-11-15 00:16:06 +08:00
        1
    owenliang   3 天前
    可以看一下 SDK 的实现,是否采用了不合理的非阻塞网络操作,比如 nonblock 的 loop read,或者 nonblock 的 select wait ?
        2
    torbrowserbridge   3 天前 via Android
    @owenliang 哪里有 SDK
        3
    lslqtz   3 天前 via iPhone
    请求变慢,请求数量每秒一样,那应该很正常吧
        4
    owenliang   3 天前 via Android
    @torbrowserbridge 你调用服务用的啥
        5
    picone   3 天前
    刚试了下,循环的 curl_exec 请求网络,等待数据返回不占用 CPU 时间。
        6
    dawncold   3 天前
    netstat 的 sendq 和 recvq
        7
    gouchaoer   3 天前 via Android
    尽量不要在 php-fpm 中 http 阻塞访问第三方服务,因为如果这个 http 服务 3 秒返回,你单机开了 300 个 php-fpm 吧,那你 qps 还是 100。。。但是 php-fpm 的阻塞又非常简单,所以解决办法很简单,你多开 php-fpm 就 ok 了,单机开个几千个 cpu 还是可以调度过来,只要你内存够。。。。你想优化?上 workerman 的异步,或者 swoole 的半协程,或者 swoole 的协程,或者换 go 吧
        8
    shiny   3 天前
    是用 file_get_contents 还是 cURL 请求的?几年前试过,同样的 http 地址,file_get_contents 会有较高的 CPU 使用率。
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1598 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 55ms · UTC 06:36 · PVG 14:36 · LAX 22:36 · JFK 01:36
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1