Jconsole是jdk自带的一套java虚拟机运行状况监视器,它可以用来监控虚拟机的内存,线程,cpu使用情况以及相关的java进程相关的MBean,主界面如下:
图1
如何连接被监控的Java虚拟机:
1. 设置被监控的Java虚拟机启动的参数,一般的情况下,会有以下三个参数,分别是:
-Dcom.sun.management.jmxremote.port=1090
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
在Eclipse中,如下图所示:
图2
被监控的虚拟机启动以后,我们就可以其它电脑上通Jconsole进行远程连接。
连接的步骤如下:
1.打开cmd,输入jconsole,就会出现jconsole控制台,如下所示:
图3
然后,我们输入要被监控的Java虚拟机的IP地址和端口号,如果输入正确,连接按钮就上生效假设设计的监控端口号为12345,连接的IP为:10.72.35.130,如下图所示:
图4
点击连接后,就会进入到图1,说明就连接成功了。
在概览这个Tab中,主要监控是的虚拟机的堆内存、线程、类以及cpu占用率;
在内存Tab中,可以选择监控的内存对象,堆内存、非堆内存、PS Eden Space、PS Survivor Space、PS Old Gen、Code Cache、PS Per Gen 当然这里监控的是Parallel Scovage算法的虚拟,如果是收集器是其它算法,可能显示的名称会有不一样,但本质上是一样的,这个有兴趣的自己可以去试试 。
像线程Lab、类Lab、VM概要Lab在这里就不作过多的介绍,下面重点说一下MBean这个Label
注册到JMX代理的平台或者应用的MBeans,可以通过MBeans标签获取。例如,内存的MBeans如下面定义:
public interface MemoryMXBean { public MemoryUsage getHeapMemoryUsage(); public MemoryUsage getNonHeapMemoryUsage(); public int getObjectPendingFinalizationCount(); public boolean isVerbose(); public void setVerbose(boolean value); public void gc(); }
内存的MBean包括四个属性:
HeapMemoryUsage. 用于描述当前堆内存使用情况的只读属性
NonHeapMemoryUsage. 用于描述当前的非堆内存的使用情况的只读属性
ObjectPendingFinalizationCount.用于描述有多少对象被挂起以便回收。
Verbose.用于动态设置GC是否跟着详细的堆栈信息,为一个布尔变量 内存的MBean支持一个操作——GC,此操作可以发送进行实时的垃圾回收请求
MBean 标签 左边的树形结构以名字的方式展示了所有MBeans的列表。一个MBean对象的名字由一个域的名字和一串关键字属性组成。例如,JVM的平台的MBeans是在“java.lang”域下的一组,而日志的MBeans则在"java.util.logging"域下。MBean对象的名字在javax.management.ObjectName 规范中定义。
当你在树中选中一个MBean,属性,操作,或者通知等一些信息会再右边显示出来。如果属性是可写的(属性被标志为蓝色),你可以进行设置。
MBean 操作 你可以操作在”操作”节点中列出的操作。
MBean 通知 你也可以看到由MBean发送出来的通知:默认情况,如果你不订阅通知的话,JConsole不会收到MBean发生过来的通知。你可以点击"订阅"按钮来堆通知进行定义,而使用"末订阅"按钮来取消订阅 4、监控内存 内存标签页通过读取内存系统、内存池、垃圾回收的MBean来获取对内存消耗、内存池、垃圾回收的情况的统计。