Spring Boot2 服务假死排查分析记录
前言:
项目部署上线后经过一段时间的运行,发现服务进程正常,可接口请求不通,重启服务就会正常,重启隔断时间还会出现,一般这种情况称之为服务假死。
一 排查思路
1.1 确定接口请求入口是否正常,排除外部原因;
1.2 查看服务日志,排查是否有明显的错误情况,针对错误情况处理;
1.3 服务所在机器的网络、磁盘、CPU、内存等进行逐一排查是否被占满;
1.4 查看服务对应的端口的情况;
1.5 通过jstack查询线程信息
二 查看服务对应的端口的情况
查看该端口详细的情况,如下:协议类型、源ip+port、tcp协议状态等信息,这里主要关注tcp协议的连接数量和每条连接对应的状态。
netstat -an |grep 8808
还可以通过grep具体的tcp状态码来确定当前tcp端口的连接数量及情况。
netstat -an |grep 8808 |grep CLOSE_WAIT
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
三 通过jstack查询线程信息
# 查看服务进程ID
ps -ef |grep label
# 查看进程的线程信息
jstack $PID
# 线程进行归并到txt文件中
jstack $PID > jstack.txt
先找到该进程的pid,然后通过jstack命令导出线程信息,并下载到本地。
在jstack.txt中搜索DeadThread无果,继续搜索BLOCKED,发现了线程阻塞,如:
java.lang.Thread.State 线程的状态:
NEW:至今尚未启动的线程的状态。
RUNNABLE:可运行线程的线程状态。处于可运行状态的某一线程正在 Java 虚拟机中运行,但它可能正在等待操作系统中的其他资源,比如处理器。
BLOCKED:受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。
WAITING:某一等待线程的线程状态。某一线程因为调用下列方法之一而处于等待状态。
TIMED_WAITING:具有指定等待时间的某一等待线程的线程状态。某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态。
TERMINATED:已终止线程的线程状态。线程已经结束执行。
hystrix-microservice-label-compass-6是tomcat处理请求的线程名称,可以看出大多数线程都被blocked,这可能就是发生假死的根源。分析得出是服务交互打开连接超时时间设置太长,修改超时时间观察一段时间服务,在未发生服务假死,问题圆满结束。
Spring Boot2 服务假死排查分析记录相关推荐
- 记一次线上服务假死排查过程
大家好,我是烤鸭: 最近线上问题有点多啊,分享一个服务假死的排查过程. 问题描述 9点10分,收到进程无响应报警(一共6台机器,有1台出现),后来又有1台出现. 排查思路 首先确认是否误报或者网络抖动 ...
- 如何用java判断进程是否假死_Spring Boot假死诊断实战记录
这两天遇到一个服务假死的问题,具体现象就是服务不再接收任何请求,客户端会抛出Broken Pipe. 检查系统状态 执行top,发现CPU和内存占用都不高,但是通过命令 netstat -n | aw ...
- Tomcat9.0.13 Bug引发的java.io.IOException:(打开的文件过多 Too many open files)导致服务假死...
问题背景: 笔者所在的项目组最近把生产环境Tomcat迁移到Linux,算是顺利运行了一段时间,最近一个低概率密度的(too many open files)问题导致服务假死并停止响应客户端客户端请求 ...
- 记录一次并发情况下的redis导致服务假死的问题
问题描述 最近项目在做性能压测,框架使用的是 spring boot 2.1.2 + jedis 2.9.1,80个并发持续压测4-5分钟服务就假死,所有的请求就pending,查看服务日志没有任何异 ...
- SrpingCloud服务假死分析 参数优化
背景 生产环境SpringCloud集群下,业务服务频繁卡顿.假死.心跳超时,触发自动重启机制. 版本 Eureka Server SpringCloud Hoxton.SR10 SpringBoot ...
- java假死_分析java进程假死
一.引言 1.编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 2.编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现 ...
- 线上tomcat服务器假死排查
之前线上的Tomcat运行一段时间就会假死,导致用户访问页面打不开,这里记录一下解决问题的步骤: 由于此项目是老项目,所以并不是很清楚里面的技术实现细节:打开服务器日志也没发现什么异常: 怀 ...
- 高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析
文章目录 概述 jstack或者可视化工具检测是否死锁(没有) 原因分析 概述 高并发编程-线程通信_使用wait和notify进行线程间的通信 - 遗留问题 我们看到了 应用卡住了 .... 怀疑是 ...
- java程序假死_分析一个常见的java多线程通信问题(假死现象)
一件复杂的事,一个人如果不能做,两个人又做的不好,一群人就可能很好的解决了.对于线程来说也是,通过多个线程就能完成一个更复杂的功能,这就需要多个线程协作,协作就需要交流,但是交流总是会出问题的.在这篇 ...
- tomcat假死排查-数据连接池耗尽
问题背景:测试环境最近隔几周就会出现请求服务没有响应,查看服务进程正产,查看后台日志没有任何报错的日志,查看tomcat下的localhost_access_log.log日志中也没有请求记录. 排查 ...
最新文章
- 二进制与十进制的小数位怎么转?
- 我发现一个新的软件,用自然语言编程!非常酷!
- Apache启动过程(PHP_MINIT_FUNCTION的调用)
- TI DSP入门学习
- Servlet容器中web.xml配置context-param与init-param
- ironpython3桌面开发_IronPython项目有了新负责人
- “滤镜景点”太坑遭吐槽!小红书致歉:将推出景区踩坑榜
- 移植Andorid4.0.4 - 步骤及问题汇总
- java redis3.0_Java + Redis(第三章)
- IntelliJ IDEA 使用教程(2019图文版)
- win7计算机病毒制作教程,win7 64位旗舰版系统删除电脑病毒文件夹方法
- webUploader选择文件按钮无效
- Python实现将mp3音频格式转换为wav格式
- BI_01_一个BI工具的痛点
- 手把手教你:微信小程序内嵌网页或H5页面
- 计算机课代表中段考总结,第一学期中段考试总结
- QQ收藏支持HTML,手机qq收藏夹的内容怎么复制
- input限制只能11位的数字电话号码
- 【Sensors】原始GNSS测量(6)
- Linux下磁盘配额设置