VisualVM的使用
VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。在JDK_HOME/bin目录下面,有一个jvisualvm.exe文件。
双击启动 jvisualvm.exe,启动起来后和jconsole 一样同样可以选择本地和远程,如果需要监控远程同样需要配置相关参数。
VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同,有的主要监控GC,有的主要监控内存,有的监控线程等。
如何安装:
1、通过https://visualvm.github.io/pluginscenters.html地址下载需要的插件。
2、从主菜单中选择“工具”>“插件”。
3、在“已下载”标签中,点击【添加插件】,选择下载的插件。单击“安装”。
4、逐步完成插件安装程序。
介绍三个主要使用几个:监控、线程、Visual GC
监控插件:能看到cpu、内存、类、线程变化的图表
线程插件:
Visual GC插件 是常常使用的一个功能,可以明显的看到年轻代、老年代的内存变化,以及gc频率、gc的时间等。
使用JVisualVM分析内存泄漏:
1)查看监控插件中堆的使用,如果系统有操作完成,但是堆内存一直很大说明有内存泄露。
2)Visual GC标签中查看老年代内存变化,如果老年代一直在gc,但是老年代内存没有减少,可能是有内存泄露。如下图所示
Jmap命令使用
Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量,占用内存大小)。
使用方法 jmap -histo pid|more。
可以通过此命令查看哪些对象占用内存比较大,也可以看到哪些对象太大导致内存泄露。