通过jmap、jstack分析问题,以及分析方法

一、问题

        多批次导入任务,会出现异步线程停止工作的情况,后续无论导入多少任务,异步线程都不会执行,只有重启能解决。

二、工具使用

进入jdk的bin目录:

cd /beeb/ap/uip/jdk1.8.0_231/bin

2.1 拉取jstack日志:

./jstack -l 28406 >./sp-dbms.jstack.log

其中28406是服务进程号。

2.2 通过jmap分析:

./jmap -dump:live,format=b,file=/beeb/ap/uip/agent/udp-logs/sp-dbms/appLogs/sp-dbms-heap.bin 28406

2.2.1 使用jhat工具:

1.启动jhat:

jhat xxx.dump

实战图:

 jhat命令后面跟的是文件名,这个文件名的后缀可以是.dump,也可以是.bin,具体要看你到出的文件后缀。

2.启动后,就可以访问:http://127.0.0.1:7000/

jhat工具页面截图

 通过分析堆内存没看出有什么异常,于是我掉头又去查看了sp-dbms.jstack.log日志。

三、分析jstack日志

3.1 查看jstack日志

        可以看的下图中,对应的线程信息,async-import-16(就是我用到的线程池)线程属于WAITING状态,并且parking to wait for (CountDownLatch),那么我可以猜测,是不是因为CountDownLatch这个共享锁因为某些原因没有释放出来?

 3.2 查看代码

        查看代码,捕获异常后更新数据,插入失败状态以及失败原因,这里有可能出现数据库连接等异常,导致下面的latch.countDown()未执行,继而出现线程一直在等待的问题:

 

 3.3 解决方法

在第一个红框出的update...方法处try...catch一下就行了。

四、java visualVM使用步骤

解决这个问题没有用到java visualVM工具,但我也记录一下它的使用步骤:

4.1 找到jdk的bin路径

 打开jvisualvm.exe。

4.2 加载我们之前jmap拉下来的xx-heap.dump或xx-heap.bin文件

 

 

4.3 接下来就可以分析了

具体分析方法以后再阐述。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值