Java体系性能测试进阶必须了解的知识点——Thread Dump

Thread Dump定义

Java Thread dump记录了线程在jvm中的执行信息,可以看成是线程活动的日志。Java线程转储文件有助于分析应用程序和死锁情况中的瓶颈。Thread Dump是非常有用的诊断Java应用问题的工具。它提供了当前活动线程的快照及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可 能的话还有源代码的行数。

Thread Dump主要解决以下两类问题:

  1. 查找内存泄露,常见的是程序里load大量的数据到缓存;

  2. 发现死锁线程;

常用的JVM调优工具

jmap

它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

jmap -histo:live pid

jmap -dump:format=b,file=heapdump.phrof pid

jstack

用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。

jstack -l pid

其他工具还包括:

jps

jps显示指定系统内所有的HotSpot虚拟机进程

jstat

jstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。

jhat

jhat(JVM Heap Analysis Tool)命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。在此要注意,一般不会直接在服务器上进行分析,因为jhat是一个耗时并且耗费硬件资源的过程,一般把服务器生成的dump文件复制到本地或其他机器上进行分析。

jinfo

jinfo查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数

Jconsole

Jconsole(Java Monitoring and Management Console)是从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控,是一个基于JMX(java management extensions)的GUI性能监测工具。jconsole使用jvm的扩展机制获取并展示虚拟机中运行的应用程序的性能和资源消耗等信息。

jcmd

jcmd是在DK1.7 以后,新增了一个命令行工具。jcmd 是一个多功能的工具,相比 jstat 功能更为全面的工具,可用于获取目标 Java 进程的性能统计、JFR、内存使用、垃圾收集、线程堆栈、JVM 运行时间,也可以手动执行 GC、导出(TODO 能导出线程信息?)线程信息、堆信息等信息。

更多关于jcmd使用细节可以参考文章 :【精选】JVM性能调优工具2之jcmd详解(覆盖全网最全的jcmd命令与说明文档)_怎能止步于此的博客-CSDN博客

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!

相关推荐
愛~杦辷个訾15 分钟前
芋道项目,商城模块数据表结构
java·sql·芋道·yudao-cloud·芋道商城
TIF星空18 分钟前
【使用 C# 获取 USB 设备信息及进行通信】
开发语言·经验分享·笔记·学习·microsoft·c#
Smile丶凉轩2 小时前
Qt 界面优化(绘图)
开发语言·数据库·c++·qt
reasonsummer3 小时前
【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最大化、最小化Vs界面
开发语言·python
C_Liu_4 小时前
C语言:深入理解指针(5)
java·c语言·算法
苏三福4 小时前
ros2 hunmle bag 数据包转为图片数据 python版
开发语言·python·ros2humble
佛祖保佑永不宕机4 小时前
麒麟系统ARM64架构部署mysql、jdk和java项目
java·arm
qqxhb5 小时前
零基础学Java——第十一章:实战项目 - 桌面应用开发(JavaFX入门)
java·开发语言·javafx
大神薯条老师5 小时前
Python零基础入门到高手8.4节: 元组与列表的区别
开发语言·爬虫·python·深度学习·机器学习·数据分析
z人间防沉迷k5 小时前
堆(Heap)
开发语言·数据结构·笔记·python·算法