通过top命令和thread dump查看JAVA线程死循环的案例

本文介绍了一种定位JAVA程序中死循环的方法。首先通过jps命令获取进程ID,然后使用top命令按CPU使用率找出可疑线程,接着利用jstack命令生成线程堆栈日志并查找死循环的具体位置。

这篇文章是由一个面试的问题引出的。面试官问曰:“尔可知如何定位JAVA程序的死循环?”。思虑良久,未有良策,回来查阅了下资料,经过一番曲折感觉自己解决问题的能力又提高了不少。以下是个例子,不一定很合适但足以说明一些问题。


1、查看进程ID:

[resin_access@172 ~]$ jps
3230 jar


2、按CPU使用率展示当前JAVA程序的所有线程:

wKiom1PI02eRHMZcAAPVO0UGnpA704.jpg

其实这个地方按CPU的使用率来判定还不太好理解,以运行时间来判定可能更能说明问题些,具体的top命令可参考另外一篇文章(万能的TOP命令)。


3、将运行时间最长的本地线程ID(3244)转成16进制为0xcac。

4、生成线程堆栈日志文件jstack -l 3230 > jstack.log;

5、打开堆栈日志搜索“0xcac”:

wKioL1PI2pLQ0NUGAAG6xH4qh6Q349.jpg

很容易的就找到了无限循环的调用线程堆栈。


注:死循环的那几个方法命名不代表任何意义纯粹是随手复制,主要是为了展示调用过程,将就着看看算了。


本文转自 古道卿 51CTO博客,原文链接:http://blog.51cto.com/gudaoqing/1439986


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值