一、问题现象

监控发现Nginx服务日志中出现较多的499状态码,499状态码在Nginx中代表的是客户端在服务端返回之前主动断开了连接,由于客户端设置的超时时间为2s,故到达2s未收到服务端响应客户端主动断开了连接造成了499响应码。

二、可能的故障点

服务器的问题,例如CPU使用率高,队列堵塞,导致无法及时处理请求,从而导致客户端超时断开连接网络出现问题,丢包或者出现网络堵塞专线线路存在问题后端服务存在性能瓶颈,当流量变大时,响应时间提高,导致客户端超时断开连接三、排查服务器问题

使用top命令,查看CPU使用率低于10%,内存使用率低于20%,没有明显的性能波动。使用vmstat 1 20命令,发现CPU队列为1,服务器具备4个CPU,使用率较低,未有明显异常,io情况也正常。初步判断与服务器无关。

三、排查网络问题

使用ethtool eth0命令查看网络带宽配置情况,发现 Speed: 1000Mb/s,Duplex:Full,千兆的网卡全部打满,没有进行带宽限制。使用sar -n DEV 1 20命令查看网络的实时流量,可以看到rxkB/s峰值1800多,txkB/s峰值2400多,远远未达到网络上的流量限制,通过sar -n EDEV 1 20查看有网络错误的流量,发现均为0使用抓包工具在网络出口上进行抓包,发现网络数据包均正常发送,未有明显延时的情况初步判断网络设备没有问题。

四、排查专线线路问题

后端服务是合作方的服务,通过专线相连接,专线有主、备两条,分别属于电信和移动运营商,主线经过电信的排查带宽无问题,排查期间将线路切换到备线,问题依旧存在。

初步判断与专线线路无关。

五、排查后端服务性能问题

由于超过2s客户端主动断开了连接,无法判断后端服务是否收到了请求且是否正常响应。在nginx location模块的配置中添加配置: proxy_ignore_client_abort on;,添加此配置以后,虽然客户端到达2s以后会主动断开连接,但是nginx会继续转发到后端服务且等待后端服务返回,并打印日志。

添加完此配置以后,发现日志中已经没有出现499的响应码,查看response time大于2s的请求,发现均正常返回,但是响应时间超过2s,高峰之时,响应时间最高超过10s。

由此可以判断,后端服务是能够正常收到请求的,只是由于后端服务网络设备或者是后端服务在大流量的情况下性能不足,导致响应缓慢,从而出现大量499响应码。

六、排查结果

当流量升高时,大约1000TPS左右,响应时间显著提高,从原来毫秒级别变成最大超过10秒钟,此时使用ping发现没有网络延时,可以确定是后端服务存在性能问题。

以上排查主要是提供的排查的方法,逐步排查各个可能的故障点,实际生产排查中一般根据经验调整排查的顺序,例如直接就先排查后端的服务的响应时间,这个就依赖于个人的经验了。

Nginx出现大量499响应码怎么办?相关推荐

  1. nginx关闭请求处理ngx_http_finalize_request源码分析

    ngx_http_finalize_request 各个http模块在执行完某个操作都需要调用这个函数,来把请求的引用计数减去1,当引用计数为0时才会真正释放一个请求.这个函数实现比较复杂,考虑了各种 ...

  2. 使用 Docker 和 Nginx 打造高性能二维码服务(二)

    使用 Docker 和 Nginx 打造高性能二维码服务(二) 三年前我曾写过一篇<使用 Docker 和 Nginx 打造高性能的二维码服务>,时过境迁,容器软件.基础系统.Nginx. ...

  3. HTTP 响应行 错误类型响应码

    新增网关响应(知识补充,和文章内容无关) 网关响应 网关响应指未能成功处理API请求,从而产生的错误响应. API网关提供默认的网关响应(default).如果您需要自定义响应状态码或网关响应内容,可 ...

  4. Http响应码及其含义--摘自apache官网

    2019独角兽企业重金招聘Python工程师标准>>> 转载自:http://www.yuanma.org/data/2009/0804/article_3823.htm HTTP状 ...

  5. HTTP协议中request报文请求方法和状态响应码

    一个HTTP请求报文由4部分组成: 请求行(request line) 请求头部(header) 空行 请求数据 下图给出了请求报文的一般格式: 请求行中包括了请求方法,常见的请求方法有: GET:从 ...

  6. 今天携程出事了:让我们来学习下http的响应码

    就在今天,2015年5月28日,中国最大的旅游机票预订网站--携程网粗大事了.据传携程网的数据库被人物理删除了,而容灾备份的数据又无法正常使用,服务器全面遭受瘫痪.每小时给携程带来的损失约100万美元 ...

  7. HTTP响应码与HTTP头标

    响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行. 响应码分五种类型,由它们的第一位数字表示: 1xx:信息,请求收到,继续处理 2xx:成功,行为被成功地接受.理解和采纳 3 ...

  8. HTTP常用的响应码说明(网页/服务器显示200、302、404、500是什么意思,表示什么)

    常用的响应码说明 200 表示请求成功 302 表示请求重定向 404 表示请求服务器已经收到,但是想要的数据不存在(一般是请求地址错误) 500 表示请求服务器已经收到,但是服务器内部发生错误(代码 ...

  9. MQ响应码是2059该如何解决

    MQ 响应码 2059(MQRC_Q_MGR_NOT_AVAILABLE)表示无法连接到消息队列管理器 (Queue Manager).这个错误可能是由于以下几种原因导致的: 消息队列管理器没有启动. ...

  10. 深入操作系统底层分析nginx网络请求及响应过程

    0. 网络传输阶段 比如说主机A是家里windows的一台笔记本电脑,主机B是linux服务器上的一个nginx,其监听80或443等web端口. 在笔记本的浏览器发送了一个http get请求,其数 ...

最新文章

  1. Ubuntu18.04安装cudnn
  2. Transforms CTM, 转换矩阵
  3. 改变UITableView的headerView、footerView背景颜色
  4. Average Score39届亚洲赛牡丹江站A题
  5. 韩信点兵-中国剩余定理(练习)
  6. java 事件驱动 netty_Netty2-事件驱动的NIO框架(使用范例)
  7. matlab如何创建table,MATLAB table数据结构 首篇
  8. regex_search
  9. Jackson序列化和反序列化
  10. Hadoop入门(二十)Mapreduce的最小值程序
  11. Windows:chm 文件打开出现“已取消到该网页的导航”的解决方案
  12. HDU 2298 Toxophily 【三分算法 or 直接推导物理公式】
  13. 判断当前日期是否在[startDate, endDate]区间
  14. ArcGIS Server 开发系列(二)--Web ADF 编程
  15. NOI十连测 第三测 T1
  16. 《通关!游戏设计之道》学习笔记
  17. AI十大数据挖掘算法
  18. 国家信息安全证书体系解读(nisp,cisp)
  19. 计算机科学与技术专业考研方向有哪些,计算机科学与技术专业考研方向有哪些?...
  20. Learn Git Branching 答案

热门文章

  1. 到底什么是爬虫技术?简谈爬虫概念
  2. MyExcel 2.2.0 版本发布,支持公式导出
  3. hihocoder-1498-Diligent Robots
  4. (基础篇)用python实现打印节日贺卡
  5. 不积跬步无以至千里,不积小流无以成江海
  6. 逐行解析linux kernel NIC驱动
  7. 电脑端哔哩哔哩视频下载
  8. 程序员英语5:number和digit都是数字,有什么区别?
  9. IDEA代码文件导航-Navigate使用技巧
  10. 互联网产品经理的学习计划