一次线上tomcat应用请求阻塞的排查经过

今天早上,收到一个报警,有个服务器的http往返时延飙升,同时曝出大量404,很是折腾了一番,特记录下思考和排查经过。

1.这是单纯的时延增大,还是有什么其他情况还未掌握?

因为不知道是只有时延变大而已,还是同时有别的情况,第一反应是先看日志有没有异常。

看了一下,一片风平浪静,既是好消息也是坏消息。好消息是核心业务还在,不然一定会打日志,坏消息是日志提供不了任何信息。当然这也说明了我们的日志肯定有不到位的地方。

2.换个思路,日志风平浪静,是否只是服务器启动了什么任务,占用了大量cpu/IO等?GC呢?

于是去看监控,服务器CPU利用率、磁盘利用率、内存利用率、Swap交换次数都很正常。

那么会不会是一次长时间的FGC导致请求大量堆积了呢?又去看gc,结果发现也很正常,这段时间连fgc都没有触发过,minorGC的时间也在合理范围内。此路不通

3.再换个思路,往返时延增大,又没有全部404,看起来像是服务器处理不过来了,那么既然服务器资源充足,为什么处理不过来了呢?是不是tcp的问题

于是去查tcp连接和端口,果然发现了一点端倪,服务器上有大量的close_wait。熟悉tcp的人应该知道,close_wait是tcp连接时,被动关闭的一方会产生的状态。所以往返时延增大就有了一个合理的解释:大量处于close_wait的未关闭socket无法被释放,导致tomcat的可用连接非常少,从而请求堆积,往返时延增大,甚至超时。

4.继续思考,为何有大量的close_wait?

通常情况下,可能是程序员没有关闭socket,我们的项目里不存在这种情况。那么,目前最大的可能是:请求阻塞在什么地方了,客户端已经超时发送fin,所以服务端就变成了close_wait,在等待请求执行完之后才能切换状态。TCP的状态切换是排错基本功,同学们一定要掌握啊!

5.被阻塞的请求阻塞在了什么地方?

这个其实比较好处理,因为通常情况下,阻塞发生在IO处。再顺一下业务逻辑,最大的嫌疑是数据库。查一下sql执行时间,发现一条简单的select 1 from dual,执行时间都非常长。那就好解释了,sql执行太慢,连接池连接耗尽,后续请求只能阻塞。打电话给运维,运维:啊?我刚刚做表迁移来着,忘了告诉你们......我:*%&&@*@@&&¥&……()*

6.小插曲,sql超时是会报异常的,为何日志里没有报警呢?

答案是,服务器的主业务压根不走数据库,丫只是因为可用连接太少了所以才时延上升。走数据库的那个链接应该是报了异常的,只是有位大仙把测试时的日志输出到console的设置覆盖了线上输出到文件的设置...

原文地址:https://www.cnblogs.com/bethunebtj/p/8386935.html

时间: 2024-09-29 21:27:00

一次线上tomcat应用请求阻塞的排查经过的相关文章

JVM探秘:线上CPU占用过高故障排查

线上系统突然变得卡顿或无法访问,排除网络异常的情况下,检查服务器资源占用情况,如果CPU.内存.磁盘IO等资源占用过高,就会导致无法继续处理HTTP请求. 如果是CPU占用飙高,有可能是程序中存在死循环.死锁导致的,也有可能是内存紧张从而频繁GC导致的,要具体问题具体分析. 排查过程 这里记录一次线上CPU占用过高的故障排查过程,重点会用到jstack命令. top命令 首先,使用top命令查看服务器资源使用情况,找到CPU占用过高的进程. 发现pid为29167的Java进程CPU占用很高,已

线上tomcat 镜像构建及容器使用

1.Dockerfile-tomcat镜像构建 FROM centos:latestMAINTAINER NANENV VERSION=8.5.42RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y &&\yum clean all && \rm -rf /var/cache/yum/* COPY apache-tomcat-8.5.42.tar.gz /tmp RUN cd /tm

一次线上页游服务器响应缓慢排查过程

最近线上一组服务器玩家反馈响应缓慢,记录下排查过程. 1.使用top命令查看服务器负载情况, top - 15:59:37 up 26 days,  3:42,  6 users,  load average: 2.98, 2.74, 2.70 Tasks: 180 total,   1 running, 167 sleeping,  12 stopped,   0 zombie Cpu(s):  8.1%us,  2.4%sy,  0.0%ni, 65.7%id, 23.6%wa,  0.0%

基于线上请求的性能测试系统CPC

1.背景 测试人员在设计性能测试脚本时,HTTP请求中的参数往往根据个人经验设置,而测试人员水平参差不齐,设计往往具有局限性,不够全面,不能涵盖全线上真实的请求,故得到的性能测试结果不能够真实反映线上真实的情况. 使用线上环境下的HTTP请求检查软件性能的问题,通过Gor记录线上真实的请求,作为性能测试脚本的请求池,用请求池物料进行性能测试,能真实的反映软件系统在线上环境下的性能指标和问题. 2.概念 2-1.架构图 2-2.技术栈 请求池: Gor: HTTP 录制工具 https://git

服务器线上问题排查研究

线上问题诸如: 1.线上服务器CPU占用率高如何排查? 2.线上服务器Load飙高如何排查?  3.线上服务器频繁发生Full GC如何排查?  4.线上服务器发生死锁如何排查? 一:线上服务器CPU占用率高如何排查? 问题发现: 在每次大促之前,我们的测试人员都会对网站进行压力测试,这个时候会查看服务的cpu.内存.load.rt.qps等指标. 在一次压测过程中,测试人员发现我们的某一个接口,在qps上升到500以后,CPU使用率急剧升高. CPU利用率,又称CPU使用率.顾名思义,CPU利

线上LVS负载均衡请求不转发案例简单解决分析一例

线上某架构组织结构基本如下: 基本架构描述: 前端采用的是lvs+keepalived做负载均衡和高可用,用来转发客户的请求给后端的业务服务器,也就是那4组nginx+tomcat业务服务器.说的更直白一些,那几台nginx+tomcat可以简答理解为lvs的客户端. 故障描述: 其中lvs转发到58.2.12.20这台服务器的时候, ActiveConn的值还有一些,InActConn几乎是没有数值的.为了这个问题纠结了好几天迟迟未能解决,由于刚到公司也不能不解决这些问题哦. 解决思路: 1)

Nginx、Tomcat线上环境优化配置

 Nginx.Tomcat线上环境优化配置 Nginx优化: Nginx安全方面的优化: 1. nginx安全优化,在nginx配置文件http标签段内添加"server_tokens  off"即可隐藏访问或者报错时提示web版本号信息. 2. server_tokens参数可以在http,server,location的位置添加 3. 还可以修改nginx的3个源码文件 4. 如还需要安全优化更改端口.用户. nginx 性能优化: 对于nginx配置文件中对优化比较有作用的一般为

为什么我执行了发布操作,但是线上的资源并没有更新?

随着整个互联网时代的发展,前后端职能的分离,在过去的一段时间里,前后端各自仅只关注自己最擅长的领域.但是,随着"大前端"时代的到来,前端们又一次开始需要关注后端,或者前后端链接的问题了. 本文起源于笔者的一次线上发布经历,事情的前因后果大概就如何题目所提到的,但是诡异的还不仅如此,当笔者执行了release操作之后,如果用之前访问的链接(如http://www.examplae.com)去访问执行了发布的web应用的话,会发现资源并没有更新,但是如果给这个链接加上一个参数(如http:

关于线上优化服务器视频笔记1-----调优线上服务器

linux服务器调优的经验 目录: 1.系统故障排除思路 重视报错信息 永远不要忘记日志文件 分析.定位.解决问题 2.影响linux性能的因素 服务器硬件因素 操作系统的相关因素 程序因素 3.系统性能优化工具 Cpu性能优化工具 vmstat,iosta,sar 内存性能检测工具 free,top,sar,pidstat 磁盘性能评估工具 iostat,sar 网络性能分析工具 ping,mtr,netstat 4.系统性能分析与标准 5.性能调优的思路与技巧分享 几个故障鼓励案例和性能优化