安装Java Visualvm监控堆内存和参数说明
安装Java Visualvm监控堆内存和参数说明
1.概述
这篇文章介绍使用Java Visualvm工具监控堆内存VisualGC插件的安装以及监控堆内存参数说明。
摘要
- VisualGC插件安装
- VisualGC监控Jmeter堆内存案例
- VisualGC监控界面参数说明
2.安装VisualGC插件
2.1.打开Java Visualvm
本地安装java后,使用cmd命令打开Java Visualvm工具。
jvisualvm
- 1
2.2.安装VisualGC插件
Java Visualvm默认安装插件网站已经关闭,将插件移到了gitHub上,下面我们通过修改下载地址安装插件。
1.打开插件下载官网
插件官网:https://visualvm.github.io/plugins.html
2.复制插件地址
点击Plugins进入插件页面,点击Plugins Centers进入插件中心
根据自己本地安装java的版本选择对应版本的插件,例如我的是java8,复制JDK8对应插件地址。
3.修改插件下载地址
点击Java Visualvm的 工具——>插件,在设置中点击编辑粘贴我们复制的插件地址
4.安装VisualGC插件
安装VisualG插件后,点击VisualVM就可以看到插件监控效果。
VisualVM监控的就是这个程序自身的堆内存使用情况。
3.VisualGC监控Jmeter堆内存案例
- Visualvm工具能够自动发现本机上所有java程序,不需要手动添加连接地址。例如我们监控Jmeter程序堆内存使用情况,首先启动Jmeter程序。
- 启动Jmeter程序后,在Visualvm会自动发现Jmeter程序,并显示在窗口中。
- 双击Jmeter就可以打开监控界面
4.VisualGC监控界面参数说明
下面重点对VisualGC监控界面各个区域的参数做一个介绍,在看到这些参数时我们知道了他代表的含义就可以对被监控程序的堆内存进行分析
下面图根据布局可分为三个区域,分别是Spaces、Graphs和Histogram,下面就逐个区域介绍。
1.Spaces区域
该区域通过柱状图方式展示堆内存运行情况
- Metaspace:方法区,如果JDK1.8之前的版本,就是Perm,JDK7和之前的版本都是以永久代- (PermGen)来实现方法区的,JDK8之后改用元空间来实现(MetaSpace)。
- Old:老年代
- Eden: 新生代Eden区
- S0和S1:新生代的两个 Survivor 区
2.Graphs区域
该区域包含了编译、类加载、GC执行统计、堆内存使用情况等几个方面数据展示
-
Compile Time:编译情况
5794 compoles - 11.682s
表示编译总数为5794 ,编译总耗时为11.682s。
一个脉冲表示一次JIT编译,脉冲越宽表示编译时间越长。 -
Class Loader Time:类加载情况
9480 loaded,0 unloaded - 5.561s
表示已加载的数量为9480 ,卸载的数量为0,耗时为5.561s。 -
GC Time:总的(包含新生代和老年代)gc情况记录
16 collections,140.800ms Last Cause:G1 Evacuation Pause
表示一共经历了16次gc(包含Minor GC和Full GC),总共耗时140.800。最后一次GC原因G1 Evacuation Pause -
Eden Space:新生代Eden区内存使用情况
(1.000G,44.000M): 27.000M,14 collections,75.425ms
表示Eden区的最大容量为1G,当前初始值容量为44.000M,当前已使用27.000M,从开始监控到现在在该内存区域一共发生了14次gc(Minor GC),gc总耗时为75.425ms。
Eden区的最大容量是我们设置的最大堆内存,程序运行时如果超过该值就会发生内存移除错误,当前初始值容量是根据当前使用堆内存的情况动态调整,如果使用堆内存呈上升趋势,那么初始值也会上升,知道最大值。反之下降。 -
Survivor 0和Survivor 1:新生代的两个Survivor区内存使用情况
(1.000G,1.000M):1.000M
表示该Survivor区的最大容量为1G(默认为Eden区的1/8),当前已用1.000M。 -
Old Gen:老年代内存使用情况
(1.000M,83.000M):57.172M,2 collections,65.375ms
表示老年区的最大容量为1G,当前容量为83.000M,当前已用57.172M,从开始监控到现在在该内存区域一共发生了2次gc(Full GC),gc总耗时为65.375ms,换算下可以看出单次Full GC要比Minor GC耗时长很多。 -
Metaspace:方法区内存使用情况
(1.045G,54.613M):53.482M
表示方法区最大容量为1.045G,当前容量为54.613M,当前使用量为53.482M。
3.Histogram区域
Histogram区域主要展示Survivor区内存使用情况
-
Tenuring Threshold:我们知道Survivor区中的对象有一套晋升机制,就是其中的每个对象都有一个年龄标记,每当对象在一次Minor GC中存活下来,其年龄就会+1,当对象的年龄大于一个阈值时,就会进入老年代,这个阈值就是Tenuring Threshold,要注意这个值不是固定不变的,一般情况下Tenuring Threshold会与Max Tenuring Threshold大小保持一致,可如果某个时刻Survivor区中相同年龄的所有对象的内存总等于Survivor空间的一半,那Tenuring Threshold就会等于该年龄,同时大于或等于该年龄的所有对象将进入老年代。
-
Max Tenuring Threshold:表示新生代中对象的最大年龄值,这个值在JDK1.8中默认为6,在JDK1.7及之前的版本中默认为15,可以通过参数-XX:MaxTenuringThreshold来指定。
-
Desired Survivor Size:Survivor空间大小验证阈值(默认是survivor空间的一半),用于给Tenuring Threshold判断对象是否提前进入老年代。
-
Current Survivor Size:当前Survivor空间大小,单位为字节(Byte,B)
-
Histogram柱状图:表示Survivor中不同年龄段对象分布。
文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。
原文链接:brucelong.blog.csdn.net/article/details/121822770
- 点赞
- 收藏
- 关注作者
评论(0)