使用jstack+ProcessExplorer来寻找java程序中的死循环

java程序没有输入的情况下狂占25%的CPU,应该是有死循环,所以寻找错误代码在哪儿。


使用任务管理器,查看java的进程id是2128,然后用jdk自带的jstack执行


jstack -l 2128 > 2128.stack.txt

然后用ProcessExplorer打开进程列表,在2128上点击右键->属性->线程,查找占用最多的线程ID是3520,转成二进制是0xDC0


然后在2128.stack.txt里查找DC0,发现有一段代码有嫌疑:


"Thread -5 " #22 prio=5 os_prio=0 tid=0x000000057a83000 nid=0xDC0 runnnable 

java.lang.Thread.State:RUNNABLE

 at com.xxx.xxx.xxx$1.run(XxxServiceImpl.java:61)


查找相关代码,果然在那里用到了类似

while(true)
    if (hashMap.isNotEmpty())
    {
        continue;
    }
这样的代码,这样改起来就有针对性了。


参考资料: http://blog.csdn.net/hexin373/article/details/8846919

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值