Java线程Dump

为什么要使用线程Dump文件来进行诊断呢?一般都是诊断什么问题呢?

  1、因为光靠加在应用中的日志往往只能够监控到业务逻辑的运行情况,然而java中的所有应用实际上都是运行在jvm中的,所以应用运行时出现的各种问题有时候需要到底层jvm中去才能找到出错的根源。例如,开发后期需要做性能调优的时候,往往也需要了解当前程序正在运行的线程的状态,正在执行的操作,从而分析系统可能存在的问题。

 2、 一般是诊断线程阻塞,CPU使用率过高,JVM Crash,堆内存不足,和类装载等问题。


如何生成?

linux中通常先通过执行“ps -ef | grep java”来获取java运行中的各个进程的pid。然后通过JDK 工具包中的 jstack <pid>来产生线程 DUMP。

使用top -H -p PID来查看对应进程是哪个线程占用CPU过高。

jstack pid > report.txt  导出jstack信息到当前目录。

若是在代码的调试阶段,建议一般dump三次以便确定问题。若是线上环境出现线程挂起情况,则应在第一时间dump信息以便分析异常原因。


线程状态分析

1、Runnable
2、Waiting on condition

3、Waiting for monitor entry 和 in Object.wait()

4、lock


总结

在我们开发过程中,应当结合操作系统的各种工具观察系统资源使用状况,以及收集 Java线程的 DUMP信息,看线程都阻塞在什么方法上,了解原因,才能找到对应的解决方法。从而达到改进程序,提高性能的目的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值