一般线程dump后都是人工去分析,今天就给大家推荐一款线上Java线程Dump分析工具fastThread。
首先什么是Thread Dump
Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数。
Thread Dump特点
能在各种操作系统下使用,能在各种Java应用服务器下使用,可以在生产环境下使用而不影响系统的性能,可以将问题直接定位到应用程序的代码行上。
Thread Dump 能诊断的问题
查找内存泄露,常见的是程序里load大量的数据到缓存;发现死锁线程。
Thread Dump最常用的两种方式
Thread dumps 能帮助我们判断 CPU 峰值、死锁、内存异常、应用反应迟钝、响应时间变长和其他系统问题。一些在线的分析工具 也能帮助我们分析和定位问题,但是这些工具都要求有一个 dump 文件。
Dump 文件有很多种方式可以获取到,由于笔者经常是linux上开发或者运行程序,所以介绍两种最常用的方式。
jstack
jstack 是一个抓取 thread dump 文件的有效的命令行工具,它位于 JDK 目录里的 bin 文件夹下(JDK_HOME\bin),以下是抓取 dump 文件的命令:
jstack -l <pid> > <file-path>
说明:
pid: Java 应用的进程 id ,也就是需要抓取 dump 文件的应用进程 id。
file-path: 保存 dump 文件的路径。
示例:
jstack -l 37320 > /opt/tmp/javaThread.txt
fastThread分析Dump
上传javaThread.txt到http://fastthread.io/进行分析,如下图:
这样就会出一个关于这个Thread Dump的全方面分析报告,方便你定位相关问题。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved