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地址和port号,如果输入正确,连接button就上生效如果设计的监控port号为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对象的名字由一个域的名字和一串keyword属性组成。比如,JVM的平台的MBeans是在“java.lang”域下的一组,而日志的MBeans则在"java.util.logging"域下。MBean对象的名字在javax.management.ObjectName 规范中定义。
当你在树中选中一个MBean,属性,操作,或者通知等一些信息会再右边显示出来。假设属性是可写的(属性被标志为蓝色),你能够进行设置。
MBean 操作 你能够操作在”操作”节点中列出的操作。
MBean 通知 你也能够看到由MBean发送出来的通知:默认情况,假设你不订阅通知的话,JConsole不会收到MBean发生过来的通知。你能够点击"订阅"button来堆通知进行定义,而使用"末订阅"button来取消订阅 4、监控内存 内存标签页通过读取内存系统、内存池、垃圾回收的MBean来获取对内存消耗、内存池、垃圾回收的情况的统计。