JVM自带性能分析工具介绍——jmap和jhat
前言
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一种工具都有其自身的特点,用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测,这里我们就简要介绍下这几个命令的作用和使用方法。
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里面的插件。
这里借用网上其他前辈的图
[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.
然后在浏览器访问: