JVM自带性能分析工具介绍——jmap和jhat

前言

JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一种工具都有其自身的特点,用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测,这里我们就简要介绍下这几个命令的作用和使用方法。

命令 作用 jps 基础工具 jstack 查看某个Java进程内的线程堆栈信息 jmap jmap导出堆内存,然后使用jhat来进行分析 jhat jmap导出堆内存,然后使用jhat来进行分析 jstat JVM统计监测工具 hprof hprof能够展现CPU使用率,统计堆内存使用情况

jmap

jmap(Memory Map)用来查看堆内存使用状况,一般配合jhat命令使用。 jmap语法如下:

jmap [option] pid  
jmap [option] executable core  
jmap [option] [server-id@]remote-hostname-or-ip

参数信息: | 参数| 作用| | ————- |:————-:| | -permstat | 打印进程的类加载器和类加载器加载的持久代对象信息 | | -heap | 查看进程堆内存使用情况:包括使用的GC算法、堆配置参数和各代中堆内存使用 | | -histo[:live] | 查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象 | | -dump:format=b,file=dumpFileName | 用jmap把进程内存使用情况dump到文件中,再用jhat分析查看 | 例子:

jhat

jhat用来对上面dump出来的内容进行分析,他会在服务器上开启一个端口作为web访问的入口,然后将解析出来的数据已web的形式提供访问,这对于某些服务器来说可能不允许其开启端口提供访问。所以也有其他工具可以分析jmap生成的dump文件,比如eclipse里面的插件。

参数 作用 -port 用以指定端口 -J-Xmx512m 指定最大堆内存,以防dump文件太大无法成功解析

这里借用网上其他前辈的图

[esv@storm-master Desktop]# jhat -port 8888 /home/esv/dump.dat   
Reading from /home/esv/dump.dat...  
Dump file created Sat Aug 01 04:21:12 PDT 2015  
Snapshot read, resolving...  
Resolving 411123 objects...  
Chasing references, expect 82 dots..................................................................................  
Eliminating duplicate references..................................................................................  
Snapshot resolved.  
Started HTTP server on port 8888  
Server is ready.

然后在浏览器访问:

经验分享 程序员 微信小程序 职场和发展