JDK中除了提供大量的命令行工具外,还有两个功能强大的可视化工具:JConsole和VisualVM,这篇文章主要来介绍一下JConsole,JConsole是在JDK1.5时期就已经提供的虚拟机监控工具,是一款基于JMX的可视化监视和管理的工具,它管理部分的功能是针对JMX MBean进行管理。
一、启动JConsole
通过JDK/bin目录下的“jconsole.exe”启动JConsole,将自动搜索出本机运行的所有虚拟机进程,不需要用户再使用命令jps来查询了,启动画面如下:
二、JConsole主界面介绍
选择其中一个进程,双击进入JConsole主界面,可以看到主界面里包含“概述”、“内存”、“线程”、“类”、“VM摘要”和“MBean”六个页签,如下图:
1、“概述”页签,显示的是整个虚拟机主要运行数据的概述,其中包含堆内存使用情况、线程、类、CPU使用情况四项信息的曲线图,这些曲线图后面是内存、线程、类页签的信息汇总
2、内存监控,“内存”页签相当于可视化的jstat命令,用于监视受收集器管理的虚拟机内存(Java堆和永久代)的变化趋势。
在图标选项的下拉框中可以选中某一内存区域对其进行监视:
3、线程监控。“线程”页签的功能则相当于可视化的jstack命令,遇到线程停顿的时候可以使用这个页签进行监控分析。线程过长时间停顿的主要原因有:等待外部资源(数据库连接、网络资源、设备资源等)、死循环、锁等待(活锁和死锁)。
在这个界面的底部,找到你需要查询的线程,可以看到详细信息:
当线程中出现死锁后,可点击“检测死锁”的按钮,将出现一个新的“死锁”页签,如果没有死锁,则提示没有检测到死锁:
有死锁:
无死锁:
4、“类”页签是对已加载当前类、已加载类总数和已卸载类总数的一个计数,并且给出了曲线图:
5、“VM概要”页签虽说是概要,但是也给出与虚拟机相关参数较详细的数据,包括线程相关、堆相关、操作系统相关、VM参数和类路径等等信息。
6、“MBean”页签,就是管理的Bean页签,页面显示了被加载类的信息。
三、断开进程的监控
点击下图标红的任意按钮都可以断开连接:
四、远程监控
如下图,对于远程进程的监控连接,需要输入远程的ip地址和端口号,用户名和密码,对于ip:端口号、用户名、密码的设置,在我的另一篇文章中有所说明,文章地址是:https://blog.csdn.net/Apeopl/article/details/81010486
总结:这只是对于JConsole监控工具的一个简介,大家可以动手编写一些程序来进行实时监控,发现这些被监控数据的变化,对于程序的优化有个直观的感受。