Java性能监控和故障诊断可视化工具之jconsole
Java性能监控和故障诊断除了丰富的命令行工具(jps,jinfo,jstat,jmap,jstack,jcmd)外还提供了可视化的监控工具jconsole、jvisualvm和jmc;这些可视化监控工具覆盖了命令行工具的功能,提供了柱状图,折线图,仪表盘等各种可视化图表从而更加直观、方便的监控Java进程。本篇文章我们首先来介绍下最早的可视化工具jconsole。
jconsole(Java Monitoring and Management Console)是jdk1.5开始引入的JVM监控工具,基于JMX实现JVM的可视化监控。
1、jconsole的启动
系统运行中输入jconsole(需要先配置环境变量,一般开发人员搭建Java开发环境时都会配置)命令:
点击“确定“后进入jconsole页面,如下图所示:
jconsole可以监控本地Java进程,也可以监控远程Java进程。从上图可以看出,本机的Java进程已经都展示出来了,只要选择一个进行监控即可;但一般测试环境或者生产环境的Java服务都是部署远端服务器上,所以我们重点讲如何通过jconsole监控远程Java进程。而jconsole要实现监控远程Java进程,需要远程服务器在启动Java进程时支持JMX连接。
2、支持JMX连接
要配置远程Java进程支持JMX连接,需要在启动Java进程时加入以下属性:
-Dcom.sun.management.jmxremote.port=7091
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
上述配置的意义是开启JMX连接端口7091,同时配置不需要ssl安全认证方式连接(一般我们的监控的服务器都是在本地局域网中,所以没有必要配置ssl安全认证方式连接,若要配置ssl安全认证方式连接,还需要配置连接的用户名及密码等)
3、jconsole监控远程Java进程
假如远程Java进程已经配置了支持JMX连接,则选中远程进程并在输入框中输入远程进程的IP和端口,如:172.30.14.242:7091(小编使用的服务器IP是172.30.14.242,配置的支持JMX的端口是7091),输入完成后点击“连接”按钮,进入远程Java进程监控画面,如下图所示:
从图中可见包括内存,线程,类,CPU,VM概要,MBean等。
jconsole主要作用是:
a.远程可视化监控服务器的Java进程;
b.监控堆不同区块的空间占用量;
4、内存监控
点击“内存”页签可以看到内存监控的页面,如下图所示:
内存监控相当于使用命令行工具jstat的功能,可以监控虚拟机内存(各个分区)的变化趋势。可以点击右上角按钮“执行GC”后查看图表变化情况以了解GC的原理。
5、线程监控
点击“线程”页签可以看到线程监控的页面,如下图所示:
线程监控相当于使用命令行工具jstack的功能,点击左下方“线程”窗口内的线程名称,可以看到线程堆栈的跟踪情况,比jstack更加直观和便于分析。另外还可以点击下方的“检查死锁”按钮,查看进程中是否存在死锁。
线程监控的主要作用是分析Java线程停顿的原因。线程停顿的原因主要有:
a、等等外部资源(数据库、网络资源、设备资源等);
b、死循环;
c、锁等待。
6、进程中类的加载和卸载情况
点击“类”页签可以看到类的加载和卸载情况页面,如下图所示:
7、查看虚拟机的概要情况以及相关运行参数
点击“VM概要”页签可以看到类虚拟机的概要情况以及相关运行参数页面,类似命令行工具jinfo的功能,如下图所示:
以上介绍了可视化工具jconsole的使用,希望对大家有所帮助。后续我们还会带来另外两个可视化工具jvisualvm和jmc的介绍,感兴趣的同学可以关注我们的微信公众号。