线上程序假死如何定位呢?

本文分享了作者在排查线上程序假死问题时的经验,包括查看日志、服务访问、进程状态、线程堆栈分析等步骤。通过这些方法,解决了HTTP超时、数据库连接、Redis连接、GC等问题,强调了jstack、jmap、jstat等工具在问题定位中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分享下我一年中遇到的线上程序假死问题,都是如何排查的

一下分析过程,假设你脱离了apm工具,或者像阿里巴巴提供的工具

其实分析过程挺简单的,基本都是因为线程watting

1、一般先看程序日志是否正常,如果日志没有任何打印

2、curl "127.0.0.1:port"看看服务是否可以正常访问,再ss -s看看连接数什么的

如果无法访问 

3、接着用 top 或者 jps -v 或者 ps -ef | grep java查看服务进程id  (pid)

4、jstack pid >> demo.log

5、直接看log,或者使用如https://jstack.review/#tda_1_dump 等网关分析一下线程信息

6、如果是线程堵死导致的,一般会看到很多线程watting着一个线程,一般被watting的线程也会有代码提示,一般也就定位到问题了

=======================执行到这里==========================

达到前6步,

解决过http工具没设置超时,被第三方堵死的问题

数据库连接池时间太长,数据库出问题,被堵死的问题

数据库事务忘记提交,导致连接堵死的问题

redis 旧jedis版本问题,导致连接堵死问题

=========================================================

7、如果看到线程堵着,又没发现问题,那这个时候就需要分析是什么线程,比如是gc线程,那么就需要用如 jstat

执行 jstat -gcutil pid (intervl) (count),看看fgc、Eden、Old区的情况

8、假如真的是gc线程堵死(stw),那这个时候要jmap dump下堆文件,使用mat分析,看是否存在内存泄漏。同时需要注意虚拟机的资源分配是否合理

===================执行到这里================================

达到前8步

解决过excel导出,内存不足导致的fullgc问题

解决过springgmvc redirect链接变化导致的内存泄漏,fullgc无法回收,gc limited问题

刚刚发现orikafactory使用不当导致的内存泄漏,Eden、Old区全满,导致的服务假死问题

 

以上常用的jstack、jmap、jstat、jps其实已经能解决遇到的大部分问题,如果无法解决与定位,建议得采用更专业的工具了

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值