Java
Java虚拟机

Java虚拟机12 - JVM工具之jconsole

简介:Java开发工具包中提供了众多的虚拟机工具可供开发者使用。

1. JConsole简介

JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视、管理工具。它管理部分的功能是针对JMX MBean进行管理,由于MBean可以使用代码、中间件服务器的管理控制台或者所有符合JMX规范的软件进行访问,所以本节将会着重介绍JConsole监视部分的功能。

注:Oracle官方提供的jconsole命令的参考文档地址为https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jconsole.html

2. JConsole的启动和连接

  1. 启动JConsole

如果是从命令行启动,JDK的目录已配置在环境变量PATH上,运行jconsole命令即可。如果从GUI Shell启动,找到JDK安装路径,打开bin文件夹,双击jconsole

当分析工具弹出时(取决于正在运行的Java版本以及正在运行的Java程序数量),可能会出现一个对话框,要求输入一个进程的URL来连接,也可能列出许多不同的本地Java进程(有时包含JConsole进程本身)来连接,需要连接哪一个进程选择后点击连接即可。如图所示:

1.jconsole启动页面.png

  1. 设置JAVA程序运行时可以被JConsolse连接分析
  • 本地Java程序(相对于开启JConsole的计算机),无需设置任何参数就可以被本地开启的JConsole连接(Java SE 6开始无需设置,之前还是需要设置运行时参数-Dcom.sun.management.jmxremote
  • 无认证连接。下面的设置表示连接的端口为8999、无需认证就可以被连接:
  • -Dcom.sun.management.jmxremote.port=8999 \
  • -Dcom.sun.management.jmxremote.authenticate=false \
  • -Dcom.sun.management.jmxremote.ssl=false
  1. 设置JConsole连接远程机器的Java程序
  • 首先写一个简单的一直运行的Java程序,编译后使用下面的命令运行在某台机器上,如IP为192.168.127.100
  • $ > java -cp . -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.managent.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false JConsoleTest
  • 然后使用另外一台机器进行连接,可以直接使用下面的命令:
  • $ > jconsole 192.168.127.100:8999

也可以在已经打开的JConsole界面操作选择连接 -> 新建连接-> 选择远程进程 -> 输入远程主机IP和端口号 -> 点击“连接”即可连接到远程Java程序进入分析界面,如图:

2.jconsole连接远程程序.png

3. 性能分析

连接到某个程序后,会出现相应的分析界面;分析界面顶部有六个标签,下面说说如何使用这六个标签:

  • 概述:JVM及各类监视信息的概览。
  • 内存:显示内存使用信息。
  • 线程:显示线程使用信息。
  • 类:显示类装载信息。
  • VM概要:显示JVM信息。
  • MBeans:显示MBeans。

3.1. 概述页面

在概述页面的图表上点击右键可以保存数据到CSV文件,以后可以使用其他工具来分析这些数据。

3.概述标签界面.png

3.2. 内存页面

内存页面可以参看堆内存,非堆内存,内存池的状况总体内存的分配和使用情况以及不同的GC进行垃圾回收的次数和时间。可以手动进行GC查看内存变化。这在分析JAVA内存问题进行调优时候非常有用。GC的算法和参数对性能有显著的影响,注意垃圾回收次数、时间、以及partial GC和full GC,调整你所使用的不同GC和以及各个GC下的参数,然后在这个视图下观察,以得到好的性能。

4.内存标签界面.png

3.3. 线程页面

线程页面左下角显示所有的活动线程(如果线程过多,可以在下面的过滤栏中输入字符串过滤出想要观察的线程),点击某行可以显示这个线程的名称、状态、阻塞和等待的次数、堆栈的信息。

统计图显示的是线程数目的峰值(红色)和当前活动的线程(蓝色)。另外下面有个按钮“检测到死锁”,有些时候可以协助我们检测死锁的发生。

5.线程标签界面.png

3.4. 类页面

类页面主要展示了加载类的变化情况。

6.类标签界面.png

3.5. VM概要页面

VM概要页面列出了JVM相关的摘要信息,如线程情况、堆内存情况、垃圾收集器、JVM参数等。

7.VM概要标签界面.png

3.6. MBeans页面

MBean是一个被管理的Java对象,和JavaBean组件相似遵循一系列之后定义的JMX规范。一个MBean可以描述一个设备、应用或者其他被管理的资源。MBeans假定一个被管理的接口包含下面的部分:

  • 一些可读或者可写的属性,或者他们两者。
  • 一些可被调用的操作
  • 一个自描述

管理接口不改变MBean实例的声明,但是MBean可以在预定义的事件发生的时候发送通知。

8.MBean标签界面.png

3.7. 使用插件

jconsole还支持一些插件,通过下面的命令可以在启动的时候顺带安装插件:

  • $ > jconsole -pluginpath /Software/JTop.jar

安装插件后,标签栏上就会多出相应的插件标签:

9.jconsole插件.png