Java 中怎么使用 jhsdb 命令行工具在运行时排查和分析 JVM 进程的内存与类结构信息

轻涛吖_5030

轻涛吖_5030

2026-08-20

783人浏览

原创

jhsdb是jdk 9引入的统一故障诊断工具集,替代旧版独立工具,支持运行时attach分析堆、线程、类加载等;需jdk 9+,通过jhsdb --help验证,用jps -l查pid,支持jmap/jstack/jcmd等子命令,安全获取堆快照与线程栈。

java 中怎么使用 jhsdb 命令行工具在运行时排查和分析 jvm 进程的内存与类结构信息

jhsdb 是 JDK 9 引入的 JVM 故障诊断工具集,替代了旧版的 jmapjstackjinfo 等独立工具,统一通过一个命令入口提供多种诊断能力。它支持在 JVM 进程运行时(无需提前开启特殊参数)连接并分析堆内存、类加载、线程栈、GC 状态等关键信息。

确认 jhsdb 可用性与目标进程 ID

确保使用的是 JDK 9 或更高版本(推荐 JDK 11+),执行 jhsdb --help 验证是否可用。获取待分析 Java 进程 PID 的常用方式:

  • jps -l 列出本地 Java 进程及其主类全名
  • 或用 ps aux | grep java 结合端口/参数识别目标进程
  • 注意:jhsdb 默认只能 attach 本用户启动的进程;若需 attach 其他用户进程,需 root 权限或目标 JVM 启动时添加 -XX:+StartAttachListener

查看实时堆内存概览与对象统计

使用 jhsdb jmap 子命令获取堆快照和对象分布,避免触发 Full GC(相比老版 jmap -histo 更安全):

Alibabacloud Sdk Client Initialization For Java
Alibabacloud Sdk Client Initialization For Java

在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。

下载
  • jhsdb jmap --pid <pid> --histo</pid>:输出按实例数排序的类统计(含类名、实例数、总大小)
  • jhsdb jmap --pid <pid> --heap</pid>:显示堆配置(初始/最大值)、各代使用情况、GC 算法及当前 GC 状态
  • jhsdb jmap --pid <pid> --dumpfile heap.hprof</pid>:生成标准 HPROF 堆转储文件,可后续用 VisualVM 或 Eclipse MAT 分析

检查类加载器与已加载类详情

排查类重复加载、内存泄漏(如 ClassLoader 泄漏)或类定义变更问题:

  • jhsdb jmap --pid <pid> --clstats</pid>:列出所有类加载器地址、加载类数量、已卸载类数、存活对象数,重点关注非 Bootstrap 类加载器的实例数增长
  • jhsdb jmap --pid <pid> --allheap --dumpfile classes.hprof</pid>:导出包含类元数据的堆镜像(需配合解析工具查看类结构)
  • 结合 jhsdb jcmd <pid> VM.native_memory summary</pid> 可辅助判断 Metaspace 是否异常增长

分析线程状态与锁竞争(关联内存行为)

内存问题常伴随线程阻塞或死锁,用 jhsdb jstack 获取线程快照:

  • jhsdb jstack --pid <pid></pid>:输出所有线程栈,标注线程状态(RUNNABLE / BLOCKED / WAITING)、锁持有/等待关系
  • jhsdb jstack --pid <pid> --mixed</pid>:同时显示 Java 栈和本地栈(C/C++ 调用),适合排查 JNI 引起的内存异常
  • 若发现大量线程处于 java.lang.ref.Finalizerjava.lang.ref.Reference$ReferenceHandler 状态,可能暗示对象回收压力大,需回溯堆中未释放的引用链

不复杂但容易忽略:jhsdb 默认使用 serviceability agent attach,部分容器环境(如 Docker)或受限 SELinux 系统可能禁用该机制,此时需在启动 Java 应用时显式添加 -XX:+UseContainerSupport -XX:+StartAttachListener 并确保挂载 /proc 可读。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

java

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

8917

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6122

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

5512

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

984

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

828

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1156

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2349

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19691

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1075

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习