java导出服务器堆栈信息,JVM堆栈信息分析

本文介绍了如何使用Java命令行工具分析服务器堆栈信息和内存使用情况,包括jps、jstat、jmap、jhat、top和jstack的使用,以及如何导出和分析heap dump和线程轨迹文件,帮助定位内存泄漏和死锁问题。

Java内存居高不下内存使用情况分析

jps :JVM Process Status 查看所有的HotSpot虚拟机进程

jps [options] [hostid]

-l 表示输出长信息

jps -l 等同 ps -ef | grep Java

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

jmap jmap(JVM Memory Map)命令用于生成heap dump文件,如果不使用这个命令,还阔以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候·自动生成dump文件。 jmap不仅能生成dump文件,还阔以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。

打印堆的对象统计,包括对象数、内存大小等等

因为在dump:live前会进行full gc,如果带上live则只统计活对象,因此不加live的堆大小要大于加live堆的大小

jmap -histo:live pid | more

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

查看运行的进程使用系统资源情况

top

查看进程中线程占用系统资源情况

top -H -p pid

也可以写成 top -Hp pid

导出jvm进程对应的堆栈信息

jmap -dump:live,format=b,file=vm20201021.bin pid

-dump:live 表示堆中存活的对象

format=b 表示导出信息的保存格式

vm20201021.bin 表示存储文件名

pid 进程ID

堆栈信息分析

导出的文件使用分析工具分析:MemoryAnalyzer

导出jvm进程中的线程轨迹

jstack [-F] [-m] [-l] pid > vm20201021.log

-F 表示强制导出 Force a stack dump

-m 表示混合模式 prints mixed mode stack trace

-l 长列表 Long listing. Prints additional infomation about locks such as list of owned java.util.concurrent ownable synchronizers.

pid 进程ID

vm20201021.log 输出到的文件名

线程信息分析

Deadlock 死锁 (重点关注)

Runnable 执行中

Waiting on condition 等待资源 (重点关注)

Waiting on monitor entry 等待获取监视器 (重点关注)

Suspended 暂停

Blocked 阻塞 (重点关注)

Parked 停止

### 在线 JVM 堆栈分析工具或网站 对于在线 JVM 堆栈分析,目前有一些工具和平台可以提供支持。这些工具通常能够帮助开发者快速定位性能问题、内存泄漏以及线程死锁等问题。以下是几种常见的在线 JVM 堆栈分析工具或相关方法: #### 1. **FastThread.io** FastThread.io 是一个非常流行的在线 JVM 线程堆栈分析工具。它可以解析 `jstack` 导出堆栈文件,并生成详细的报告[^3]。该工具的主要功能包括: - 分析线程状态分布。 - 找出阻塞线程及其原因。 - 提供死锁检测。 - 展示线程优先级及类型(如守护线程等)[^4]。 使用方法: ```bash jstack <pid> > thread.dump ``` 将生成的 `thread.dump` 文件上传至 FastThread.io 即可进行分析。 #### 2. **Java Mission Control (JMC)** 虽然 Java Mission Control (JMC) 主要是一个桌面工具,但它也支持通过网络连接到远程 JVM 实例进行实时分析[^1]。JMC 的优势在于其强大的图形化界面,能够展示 CPU 使用情况、内存分配趋势以及线程活动等信息。 #### 3. **VisualVM** VisualVM 是 JDK 自带的一款工具,也可以通过插件扩展实现部分在线分析功能。例如,通过远程 JMX 连接,VisualVM 可以监控远程服务器上的 JVM 性能指标。 #### 4. **YourKit** YourKit 是一款商业化的性能分析工具,支持在线分析 JVM 堆栈信息。它提供了丰富的特性,如内存泄漏检测、CPU 性能分析以及线程监控等。YourKit 支持通过代理方式连接到远程 JVM 实例,从而实现在线分析[^5]。 #### 5. **Eclipse MAT (Memory Analyzer Tool)** 尽管 Eclipse MAT 更专注于内存分析,但它同样可以解析 `jstack` 和 `jmap` 导出的堆转储文件。如果需要在线分析,可以先通过命令行工具生成堆栈文件,再上传至 MAT 进行深入分析[^3]。 #### 示例代码:导出堆栈信息 以下是导出 JVM 堆栈信息的命令示例: ```bash # 查找 Java 进程 ID jps -l # 导出指定 PID 的堆栈信息 jstack <pid> > stack.dump # 导出信息 jstack -l <pid> > stack_with_locks.dump ``` ### 注意事项 在选择在线分析工具时,需注意以下几点: - **安全性**:确保上传的堆栈文件不包含敏感信息。 - **兼容性**:某些工具可能对 JDK 版本有特定要求。 - **实时性**:部分工具仅支持离线分析,无法直接连接到运行中的 JVM 实例。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值