业务架构图:

nginx 状态监控图:

本次故障的表现为:前端php页面无法打开,空白页或者502错误。

nginx中php配置如下:

location ~ \.php$ {
root /xxx/xxx;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
access_log logs/fastcgi.log ngx_Web_log;
}

首先查看 logs/fastcgi.log 如下:

统计nginx和php交互状态码如下:

   总数    状态码

可以发现日志里大量的出现了499的状态码,百度说明:

nginx源码:

/*
* HTTP does notdefine the code for the case when a client closed
* the connectionwhile we are processing its request so we introduce
* own code to logsuch situation when a client has closed the connection
* before we even tryto send the HTTP header to it
*/
#define NGX_HTTP_CLIENT_CLOSED_REQUEST 499

这是nginx定义的一个状态码,用于表示这样的错误:服务器返回http头之前,客户端就提前关闭了http连接

简单来说,由于后端服务处理时间过长而导致前端nginx等待超时断开。

查看nginx状态监控图发现active在这个时间段,活动连接一直保持在3000左右,根据经验,日常活动连接数一般在900左右,这次突然上了3000,有可能是攻击所致。

1. 查看网络连接数:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    2. 过滤fastcgi.log访问连接ip数量,通过nginx deny禁止掉可疑ip。

经过上面的处理后,活动连接数的变化不是很明显。于是在程序中添加info.php来测试php响应情况。

测试结果:
    重启php-fpm 大概10秒后,就无法再次访问info.php ,大致估计是因为php accept queue 被占满所致。查看一下内核参数是否正常:

# ulimit -n     # 文件最大描述符

# sysctl -a | egrep "tw|backlog|cookies|synack|soconnmax" 

net.core.netdev_max_backlog =          # 程序accept queue队列长度
net.ipv4.tcp_max_syn_backlog = # syn queue 队列长度
net.ipv4.tcp_max_tw_buckets = # 保持 TIME_WAIT 最大值
net.ipv4.tcp_synack_retries = # 服务端发送syn + ack 包次数限制
net.ipv4.tcp_syncookies = # 启用syn cookies,当syn等待队列出现溢出时,启用cookies来处理,可以防范少量的syn攻击
net.ipv4.tcp_tw_recycle = # TIME_WAIT 状态快速回收
net.ipv4.tcp_tw_reuse = # TIME_WAIT 状态快速重用

一些常用的内核参数都是没有问题的。

问题总汇下:
    1. nginx fastcgi.log 大量返回499
    2. nginx 活动连接数远远高于正常业务并发
    3. php 重启很快就失去响应。

这时候发现问题排查起来有点困难了,于是和开发、数据库沟通下。

沟通下来的结果就是:
    早上数据库被DBA调整过。出现过停止服务的状态,而开发人员通过java开发的api是要去连接数据库的。
    请求从nginx进来,通过php去调用java接口,而java接口无法连接上数据库无法将数据返回给php,所以nginx等待超时返回499

沟通后思路清晰了,早上DBA动MySQL没有通知到大家,造成了这一系列连锁反应。可见,通知和沟通是很重要的。

重启java程序,php正常返回结果,业务恢复正常。

最后,做技术不能只是关注技术本身,熟悉业务流程和沟通也是作为运维人员必备的技能。

记录一次lnmp故障报告的更多相关文章

  1. [文档]运维故障报告template

    RCA的基本概念 根本原因分析技术(root cause analysis,RCA). IOWA州立大学质量管理学院认为,很多公司在设备发生故障后,都能够很快修复, 但难以发现故障的根本原因,所以此故 ...

  2. Linux记录-批量安装LNMP(转载)

    #!/bin/bash # Describe: This is a one - button installation service script # 提示:使用此脚本时,尽量先选择第一项配置Yum ...

  3. CM记录-集群运行故障修复记录

    集群运行故障分析(空间不足.时钟误差.状态不良) 调整空间.同步时间.重启 修复后: 各个数据节点容量分布情况

  4. 记录一次redis故障

    ResponseError: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persi ...

  5. 【转载】最强NLP预训练模型!谷歌BERT横扫11项NLP任务记录

    本文介绍了一种新的语言表征模型 BERT--来自 Transformer 的双向编码器表征.与最近的语言表征模型不同,BERT 旨在基于所有层的左.右语境来预训练深度双向表征.BERT 是首个在大批句 ...

  6. Lnmp 源码编译安装、常见错误整理

    简介: Lnmp 环境的搭建还是非常简单的,之前由于博客迁移等原因,导致丢失了好多博文,这次重新整理记录一下. Lnmp 即:Linux .Nginx .Mysql .PHP Lnmp 是一套 Web ...

  7. MAC OS X Yosemite的PyQt4配置记录

    MAC OS X Yosemite的PyQt4配置记录 声明: 1)本报告由博客园bitpeach撰写,版权所有,免费转载,请注明出处,并请勿作商业用途. 2)若本文档内有侵权文字或图片等内容,请联系 ...

  8. beta week 2/2 Scrum立会报告+燃尽图 01

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9954 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩昊 ...

  9. 商汤开源的mmdetection技术报告

    目录 1. 简介 2. 支持的算法 3. 框架与架构 6. 相关链接 前言:让我惊艳的几个库: ultralytics的yolov3,在一众yolov3的pytorch版本实现算法中脱颖而出,收到开发 ...

随机推荐

  1. Codeforces Round #326 Div.1 C.Duff in the Army 树上倍增

    题意概述: 给出一棵N个结点的树,然后有M个居民分散在这棵树的结点上(允许某个结点没有居民).现在给出一些询问形如u,v,a,定义k=min(x,a),其中x表示的是u->v路径上的居民数量.将 ...

  2. JAVA_四大代码块_普通代码块、构造代码块、静态代码块、同步代码块。

    普通代码块 在方法或语句中出现的{}里面的内容就被称为普通代码块,普通代码块和一般的语句执行顺序一样,由他们在代码中出现的次序决定,即--"先出现先执行". 但是不同的普通代码块即 ...

  3. vs2017切换设计、拆分假死的解决

    今天安装了vs2017版把vs2015卸载了,原因就是vs2015运行webform后ajaxpro总是会出现time out现象.太难受了,所以决定体验一下新版本. 安装了vs2017后ajaxpr ...

  4. hdu 3500 Fling (dfs)

    Fling Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submi ...

  5. P3509 [POI2010]ZAB-Frog

    题目描述 On the bed of one particularly long and straight Byteotian brook there lie  rocks jutting above ...

  6. [洛谷P3803] 【模板】多项式乘法(FFT, NTT)

    题目大意:$FFT$,给你两个多项式,请输出乘起来后的多项式. 题解:$FFT$,由于给的$n$不是很大,也可以用$NTT$做 卡点:无 C++ Code:  FFT: #include <cs ...

  7. [Leetcode] climbing stairs 爬楼梯

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  8. 洛谷 P2801 教主的魔法 解题报告

    P2801 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.--.N. ...

  9. [poj 3281]最大流+建图很巧妙

    题目链接:http://poj.org/problem?id=3281 看了kuangbin大佬的思路,还用着kuangbin板子orz   http://www.cnblogs.com/kuangb ...

  10. Tile Cut~网络流入门题

    Description When Frodo, Sam, Merry, and Pippin are at the Green Dragon Inn drinking ale, they like t ...