网站 502/504 故障解决过程分享 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xap
V2EX    PHP

网站 502/504 故障解决过程分享

  •  1
     
  •   xap 2014-09-11 14:52:51 +08:00 9780 次点击
    这是一个创建于 4130 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器是租的腾讯云,双核CPU,4G内存,只跑nginx+php(mysql是另租的db server)

    以前跑的一直很正常,最近几天用户反映经常502/504,等我接到消息打开网站时,又一切正常了!


    这不,又来了
    ssh到服务器上,第一件事儿是重启php,重启nginx
    然后刷新网站,正常了

    可是……没几秒钟,又502了

    再重启php,重启nginx……
    正常一会儿,又502……

    好吧,这次是重启大法没用了!

    查看nginx的error日志,发现有很多这样的日志出现
    upstream timed out (110: Connectin timed out) while reading response header from upstream

    经过goolge大法,在 nginx.conf 配置里加上以下几行解决问题

    fastcgi_buffer_size 128k;
    fastcgi_buffers 6 128k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    fastcgi_intercept_errors on;

    可究竟是为什么恢复正常了,自己也不太明白(哪位大拿清楚请指点一下)

    我猜想原因是我们网站输出的html页面有几十k,默认的buffer不够大(是多大我也8晓得),于是php进程总是要读写硬盘导致速度过慢,于是响应不过来,堆积多了就卡502/504了……


    一切正常的 分割线

    过了几个礼拜,今儿上午又出现502/504了

    愁吖,这顽疾又来了
    再重启php,重启nginx……
    刷新网站……还是502……

    查看nginx的error日志,发现有很多这样的日志出现
    recv() failed (104: Connection reset by peer)
    connect() failed (111: Connection refused)

    咦,这是新的error日志喔

    再看php的error日志,发现网站挂掉的那个时间点有这么两行
    [11-Sep-2014 09:14:51] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 47 total children
    [11-Sep-2014 09:14:52] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it

    再次启用google大法,不求甚解的修改了/etc/php-fpm.d/www.conf文件的这么几个参数
    pm.max_children = 100
    pm.start_servers = 30
    pm.min_spare_servers = 20
    pm.max_spare_servers = 70
    重启php、nginx后,一切恢复正常


    哪位大神给说说还有什么漏洞需要补上的么?以免以后502/504这两位大姨妈又来拜访……
    8 条回复    2014-09-12 12:24:08 +08:00
    kmvan
        1
    kmvan  
       2014-09-11 15:08:14 +08:00 via Android
    网站的流量有多少呢?
    msg7086
        2
    msg7086  
       2014-09-11 15:13:07 +08:00   2
    首先你要分析原因。原因不分析你说个

    首先是PHP的负载,如果你网站流量很大,PHP会吃满CPU,这时候妥妥的换好机器去。

    然后如果PHP没有吃满的情况下,多数就是PHP连接的第三方服务跟不上了,比如MySQL。

    MySQL的qps几乎就是看磁盘性能。像linode这样全SSD的机器,iops轻松上千,请求完全不会跟不上。但是普通硬盘的话,qps有个200那就是运气好,遇上共享HDD,qps跌破20都有可能。结果就是MySQL一堆排队的,PHP也要等着,然后就把PHP进程用光了,于是502/504就出来了。

    所以,先说说网站的流量和负载吧。
    aru
        3
    aru  
       2014-09-11 15:21:23 +08:00
    非常赞同 @msg7086 的看法,50个php进程不算少了,如果网站不是一天几十万pv的请求,那么就是程序的执行速度太慢了,很有可能受限于数据库等情况
    lzjun
        4
    lzjun  
       2014-09-11 15:30:12 +08:00
    持续关注
    xap
        5
    xap  
    OP
       2014-09-12 10:07:59 +08:00
    @msg7086

    服务器配置
    web server:CPU:2核 内存:4G
    top - 09:43:42 up 32 days, 18:05, ? users, load average: 0.17, 0.33, 0.35
    Tasks: 154 total, 1 running, 153 sleeping, 0 stopped, 0 zombie
    Cpu(s): 18.6%us, 1.1%sy, 0.0%ni, 79.4%id, 0.0%wa, 0.0%hi, 0.7%si, 0.2%st
    Mem: 4051060k total, 3862184k used, 188876k free, 396548k buffers
    Swap: 2097144k total, 92k used, 2097052k free, 667160k cached


    db server是购买的CDB服务,没写具体配置
    只有容量和建议访问次数指标,分别是100G、1500次/秒
    腾讯云提供的后台负载显示为:空间占有率12.5%,访问200多次/秒(峰值400多,远低于建议访问次数)



    网站跑的是一个游戏
    流量不高,每天1-2千人次
    平均在线估计100左右,人均操作估计4-5次/分钟左右吧(没用长连接,每次操作ajax
    连一次服务器)
    如果每次操作算一个pv的话,倒是达到了 @aru 说的一天几十万pv了……
    msg7086
        6
    msg7086  
       2014-09-12 10:36:41 +08:00
    每秒平均200qps挺大了其实。

    如果是远程mysql的话,问题会不会出在mysql的网络连接上?
    xap
        7
    xap  
    OP
       2014-09-12 11:30:40 +08:00
    @msg7086
    web、db server都是租的腾讯云,其间的网络连接应该不会有问题吧?
    我买的是一般的cdb服务,它最贵的cdb能支持7500次/秒

    问了下同事,做了下列操作
    netstat -nat |grep 1027 > netlog.text
    1027是db server的端口
    netlog.text 有3000多行,基本都是TIME_WAIT,只有1行ESTABLISHED

    同事说
    TIME_WAIT 表示刚断开不久的连接
    ESTABLISHED 表示正在执行中的连接

    又连续执行了5次
    netstat -nat |grep 1027 |grep ESTABLISHED
    2次1行
    1次2行
    1次5行
    1次0行

    我理解这表明到mysql db的网络连接是很顺畅的,应该可以排除这个问题
    msg7086
        8
    msg7086  
       2014-09-12 12:24:08 +08:00
    那就很难说了。如果db确实能够承受下这个数量的访问的话,那我也不清楚到底哪里有问题了。

    只能说等服务器出现502的时候再snapshot下系统状态才能知道了。

    毕竟平时很少会出现。不具有普遍性。甚至是短暂攻击导致502也有可能呢。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2354 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 11:37 PVG 19:37 LAX 03:37 JFK 06:37
    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