JVM性能调优工具

一、JDK内置工具对比

 
功能
JHSDB
JCMD
其他工具
visualVM
Java进程
N/A
jcmd
jps -lm
界面:overview
堆Dump
jhsdb jmap --binaryheap
jcmd pid GC.heap_dump
jmap -dump pid
 
 
按钮:heap dump
堆直方图
jhsdb jmap --histo
jcmd pid GC.class_histogram
jmap -histo pid
按钮:heap histogram
线程Dump
jhsdb jstack --locks
jcmd pid Thread.print
jstack pid
 
按钮:thread dump
系统属性
jhsdb jinfo --sysprops
jcmd pid VM.system_properties
jinfo -sysprops pid
界面:overview
VM标记
jhsdb jinfo --flags
jcmd pid VM.flags
jinfo -flags pid
界面:overview

二、监控工具

1.jps

jps全称Java Virtual Machine Process Status Tool,用来查看JVM进程状态。
 

2.jstat

jstat全称JVM Statistics Monitoring Tool,用于监控JVM的各种运行状态。
 

三、故障排查工具

1.jinfo

jinfo全称Java Configuration Info,主要用来查看与调整JVM参数。
 

2.jmap

jmap全称Java Memory Map,用来展示对象内存映射或堆内存详细信息。
 
命令格式:
jmap -dump:live,format=b,file=heap.bin <pid>
jmap -heap <pid>
 
dump文件命令示例:
jmap -dump:file=xxx.dump 39888
jmap -dump:live,format=b,file=xxx.hprof 39888
jmap -heap 39888

3.jstack

jstack,全称Stack Trace for Java,用于打印当前虚拟机的线程快照(线程快照也叫Thread Dump或者javacore文件)。
 
命令示例:
jstack 进程ID >1.txt

4.jcmd

jcmd全称JVM Command,用于将诊断命令请求发送到正在运行的Java虚拟机,从JDK 7开始提供。
 

5.jhat

jhat(JVM Heap Analysis Tool)用来分析jmap生成的堆Dump。
jhat功能不是很强,VisualVM、Eclipse Memory Analyzer等都比jhat强大。
 

6.jhsdb

Jhsdb全称Java Hotspot Debugger,Hotspot进程调试器,可用于从崩溃的JVM附加到Java进程或核心转储。是一款基于Serviceability Agent(可维护性代理,简写为SA)的调试工具。Serviceability Agent是一个JDK组件,用于快照调试、性能分析以及深入了解Hotspot JVM上执行的Java应用程序。
 
JDK 8及更低版本不直接提供jhsdb命令,但只需找到目录下的sa-jdi.jar文件,然后启动即可。步骤如下:
# 修改环境变量JAVA_HOME(这里用export临时修改环境变量,当然也可永久修改)
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home"
 
# 为sa-jdi.jar授予执行权限
sudo chmod +x $JAVA_HOME/lib/sa-jdi.jar
 
# 启动方式1:使用交互式命令行调试器(相当于jhsdb clhsdb)
java -cp $JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB
 
# 启动方式2:使用交互式GUI调试器启动jhsdb(相当于jhsdb hsdb)
java -cp $JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.HSDB

 

jhsdb的GUI模式:jhsdb hsdb子命令
启动命令:jhsdb hsdb [--pid pid | --exe executable --core coredump]
 

四、可视化工具

1.jconsole

JConsole(Java Monitoring and Management Console)是一款基于JMX(Java Manage-ment Extensions)的可视化监控、管理工具。它主要通过JMX的MBean(Managed Bean)对系统进行信息收集和参数动态调整。JMX是一种开放性的技术,它既可以用在虚拟机本身的管理上,也可以用于运行在虚拟机之上的软件中。目前很多软件都支持基于JMX进行管理与监控。
启动方式:执行命令jconsole
 

2.visualVM

VisualVM是一个All-in-One Java Troubleshooting Tool,从JDK 6开始提供,是个强大的监控及故障处理程序之一。
对于JDK 8及更低版本,JDK内置了VisualVM。只需执行jvisualvm命令即可启动,对于JDK 9及更高版本,需要独立下载的VisualVM,github:https://github.com/oracle/visualvm
 
分析堆Dump文件
File -Load - 选择hprof - 打开 - 分析
 
注意:
profier对性能影响很大,不要在生产中执行,另外需要禁止类共享 -Xshare:off

3.JMC

JDK Mission Control也叫Java Mission Control,简称JMC。作为JMX控制台,监控虚拟机MBean提供的数据,可持续收集数据的JFR(Java Flight Recorder),并可作为JFR的可视化分析工具.
启动方式:执行命令jmc

4.MAT

Memory Analyzer Tool,简称MAT。是第三方工具(非JDK内置),他是一个快速且功能丰富的Java堆内存分析器。
主要用于:
  • 找出内存泄漏的原因
  • 找出重复引用的类和Jar
  • 分析集合的使用
  • 分析类加载器 
Leak Suspects:快速查看泄露的可疑点
Histogram:列出内存中每个对象的名字、数量以及大小
Dominator Tree:将所有内存中的对象按大小进行排序,并且我们可以分析对象之间的引用结构
Retained Heap:表示这个对象以及它所持有的其它引用(包括直接和间接)所占的总内存,简单的理解就是,如果这个对象被删除了(GC回收掉),能节省出多少内存。
Shallow Heap :表示一个对象消费的内存的总量,简单的理解就是对象实际占用的堆大小。比如对象的每个引用变量会占用 32 或 64bit(取决于操作系统),每个 Integer 需要占用 4byte,每个 Long 需要占用 8byte,诸如此类

5.JITWatch

JITWatch是JIT编译器的日志分析器与可视化工具,用来检查内联决策、热点方法、字节码以及汇编的各种细节,汇编细节需要配合HSDIS使用
 

posted @ 2021-03-14 15:33  windge  阅读(508)  评论(0)    收藏  举报