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

求助,服务器 cpu 没上去,但是 5xx 状态码持续增加

  •  
  •   cszchen · 2020-04-11 11:35:42 +08:00 · 1687 次点击
    这是一个创建于 1688 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前做的外包项目,还在维护期。使用 Laravel5.5 开发,部署在 AWS 。
    目前 500 错误率有点高,3%左右。

    服务器配置

    • 负载均衡
    • 2 台 8 核 16G 的服务器
    • RDS-MySql 4 核 16G
    • Redis 3.? G 的内存

    用户量 /访问量

    系统是给设备用的,设备会定期上报,每次上报会发起几个请求(>=2 )
    最高的时候请求量是 1 分钟接近 3.5 万( CloudWatch 统计的)

    目前服务器 CPU 平均使用率很低,不到 20%,数据库的使用率也是 15%左右,iops 最高 700 多(上限 3000 ), 而且目前数据库的活动会话数很低。


    补充一下,php-fpm 的状态

    listen queue:         0  
    max listen queue:     3210  
    listen queue len:     65535  
    idle processes:       724  
    active processes:     76  
    total processes:      800  
    max active processes: 801  
    max children reached: 0  
    slow requests:        0  
    
    第 1 条附言  ·  2020-04-11 17:26:15 +08:00
    Too many open files
    第 2 条附言  ·  2020-04-12 18:00:30 +08:00
    谢谢大家,无意间发现问题了,是客户的终端有严重 bug,自带 ddos 攻击,会同时重复的发起多次上报请求。。。
    Vogan
        1
    Vogan  
       2020-04-11 11:41:05 +08:00 via iPhone
    1. 看 log 。nginx 的 log 和 laravel 的 log
    2. 低负载但是 50x 很有可能 PHP 的进程数开得少,导致少数进程响应大量请求
    3. 如果是 API,建议使用 lumen
    cszchen
        2
    cszchen  
    OP
       2020-04-11 12:02:57 +08:00
    @Vogan 不是 API,xml 格式的,协议叫 tr069 。现在每台服务器 800 个静态进程,日志没找出什么问题。。
    cszchen
        3
    cszchen  
    OP
       2020-04-11 12:03:00 +08:00
    @Vogan 现在每台服务器是 800 个进程,静态的,nginx 的日志没发现什么问题 😢
    dnsaq
        4
    dnsaq  
       2020-04-11 13:09:42 +08:00 via iPhone
    这叫负载不高,我没看懂为啥前端给 8 核 x2,数据库却给 4 核,redis 真的有用起来嘛。
    dnsaq
        5
    dnsaq  
       2020-04-11 13:12:03 +08:00 via iPhone
    上报量大就做队列
    DonnyChao
        6
    DonnyChao  
       2020-04-11 13:37:51 +08:00
    海外服务器的话,还有可能是线路问题
    v2orz
        7
    v2orz  
       2020-04-11 13:48:04 +08:00
    检查一下各个服务器的 tcp 连接状态,TIME_WAIT 和 CLOSE_WAIT 是不是很多(千 /万)
    还有各种内核参数
    marcolin
        8
    marcolin  
       2020-04-11 14:02:45 +08:00
    看你的 log,800 个 process 都曾经被打满了,而且有排队等候的队列( max_listen_queue )
    看下响应时间的分布就清楚了,可能是请求响应的太慢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2699 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:34 · PVG 08:34 · LAX 16:34 · JFK 19:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.