首页 » 脚本文章 » 线上服务卡死问题排查过程记录(线上排查线程服务过程)「线上一个服务的启动特别慢,你怎么样排查」

线上服务卡死问题排查过程记录(线上排查线程服务过程)「线上一个服务的启动特别慢,你怎么样排查」

少女玫瑰心 2024-07-23 23:27:27 脚本文章 0

扫一扫用手机浏览

文章目录 [+]

问题分析:首先查看cpu、io、jvm相关信息均正常。
启动arthas,通过thread命令发现很多http请求都处于WAITING状态,这里就可以肯定应该服务卡死的原因就是这个。
如下图

查看具体线程栈信息,如下

上图大概可以推测http处于WAITING是不是在等待获取HttpClient线程池里的线程(AbstractConnPool),找到熟悉的SeataFeignClient,怀疑会不会跟Seata有关系,打开源代码分析

线上服务卡死问题排查过程记录(线上排查线程服务过程) 线上服务卡死问题排查过程记录(线上排查线程服务过程) 脚本文章
(图片来自网络侵删)

一步步跟进去

大概明白了七八分,tomcat http线程都处WAITING状态就是在等待获取HttpClient里的线程资源,这时候就有疑问,线程池的资源为什么不释放,一方面流程确实很大,超过了线程池负载等待资源,结合系统的请求量,这方面不大可能,可以排除;另一个就是资源使用完没有回收,通过debug,找到系统一段封装代码如下

线上服务卡死问题排查过程记录(线上排查线程服务过程) 线上服务卡死问题排查过程记录(线上排查线程服务过程) 脚本文章
(图片来自网络侵删)

至此找出元凶。

总结:首先要能够从现象分析问题所在,像我们这就是服务运行一段时间接口就卡住不响应,服务器cpu、io、jvm等指标比较正常,通过Arthas查看线程栈信息,一步步分析,可以确定是在通过feign调用其他服务时出了问题,接着往下可以找个接口进行debug,先摸清feign调用的大体流程,一般像feign这样的组件比较成熟,不大可能会出问题,还是要往自身扩展封装的代码去找问题。

标签:

相关文章