1 什么是JConsole
Java开发者为了方便广大研发人员在开发过程中,对jvm性能情况进行实时监控与查看,开发了一整套完整的性能监控系统,包括命令行脚本与可视化页面,其中,命令行脚本的使用方式可以查看文章:【java虚拟机】JDK的命令行工具详解 。
但是,虽然命令行工具的功能完备且强大,但是由于使用复杂,可视化程度低,不利于研发人员的使用,所以jdk也同时内置了可视化监控工具JConsole,在jdk的bin目录下既可以找到。
JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视、管理工具。
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
2 JConsole的使用
1) 进入JDK/bin目录下,找到“jconsole.exe”文件,双击启动。
2) 工具将自动搜索出本机运行的所有虚拟机进程,选择其中一个,点击连接。
3) 选择信任不安全的链接。
4) 接下来就可以对进程进行监控了。
3 监控内容说明
3.1 内存监控
这个页签相当于可视化的jstat命令
如图所示,可以监控java进程的各个内存的使用情况,包括Java堆和永久代,比如图中展示的就是堆内存的情况,图中为了演示效果写了一直不断创建对象的代码,并将最大堆内存设置为20M,可以看到堆内存一直不断增加,到了10M左右时,发生垃圾收集,收集后下降到3M左右。
右下角这个区域,展示了全部内存块的概要,可以看到堆内存分了三块,非堆内存分了5块,可以说非常直观,具体每块是什么内容这里不做详细解释。
左下角展示了一些指标信息,比如上次垃圾收集时间、最大内存值等等。
3.2 线程监控
线程”页签的功能相当于可视化的jstack命令 如图所示,可以查看线程数量,对于多线程程序的分析,是一个很直观的展示进程内的线程数量变化情况,下面的进程详情,可以看线程的堆栈信息,查看是否堵塞等。
遇到线程停顿时可以使用这个页签进行监控分析。前面讲解jstack命令的时候提到过线程长时间停顿的主要原因主要有:等待外部资源(数据库连接、网络资源、设备资源等)、死循环、锁等待(活锁和死锁)。
3.3 类监控
这里可以查看进程加载类的数量变化情况。
3.4 VM概要
VM概要主要用文字方式展示进程的最新状态值,包含内容比较多这里不意义解释。