java虚拟机内存监控

VisualVM的使用
VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。在JDK_HOME/bin目录下面,有一个jvisualvm.exe文件。
双击启动 jvisualvm.exe,启动起来后和jconsole 一样同样可以选择本地和远程,如果需要监控远程同样需要配置相关参数。

image.png

VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同,有的主要监控GC,有的主要监控内存,有的监控线程等。
image.png

如何安装:
1、通过https://visualvm.github.io/pluginscenters.html地址下载需要的插件。
2、从主菜单中选择“工具”>“插件”。
3、在“已下载”标签中,点击【添加插件】,选择下载的插件。单击“安装”。
4、逐步完成插件安装程序。
介绍三个主要使用几个:监控、线程、Visual GC
监控插件:能看到cpu、内存、类、线程变化的图表
image.png

线程插件:
image.png

Visual GC插件 是常常使用的一个功能,可以明显的看到年轻代、老年代的内存变化,以及gc频率、gc的时间等。
image.png

使用JVisualVM分析内存泄漏:
1)查看监控插件中堆的使用,如果系统有操作完成,但是堆内存一直很大说明有内存泄露。
image.png

2)Visual GC标签中查看老年代内存变化,如果老年代一直在gc,但是老年代内存没有减少,可能是有内存泄露。如下图所示
image.png

Jmap命令使用
Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量,占用内存大小)。
使用方法 jmap -histo pid|more。
可以通过此命令查看哪些对象占用内存比较大,也可以看到哪些对象太大导致内存泄露。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。