JVM 远程监控:JConsole 和 JVisualVM 的使用


前言


  • 希望可以给第一次使用 JConsole 和 JVisualVM 的小伙伴提供一个参考。
  • 基本上,每一部分内容的开头,博主都会附上一个通过官方文档的链接,想要了解更多内容的小伙伴可以点击进去阅读。
  • 博主在写这边博客之前,也参考了很多其他博主的博客。在其他博客中,可能会有其他额外的配置,这些配置在官方文档中没有提到。博主在自己的环境中,没有添加任何官方文档中没有提到的配置,但最后也可以成功进行监控。博主猜测可能跟版本有关。小伙伴们在做监控的时候,需要注意一下这点.

官方文档


  • Jconsole 的相关文档,可以点击​​这里​​查看。
  • JVisualVM 的相关文档, 可以点击​​这里​​查看。

环境介绍


  • Tomcat 8.5.34
  • JDK jdk1.8.0_181
  • CentOS 6.4

JConsole 远程监控

开启远程监控和管理功能


  • 启动 JConsole 之前,需要远程服务器在启动 JVM 时开启 JMX Agent,然后才能进行远程连接并对 JVM 进行监控。更多信息可以查看​​官方文档​​。
  • 要启动 JMX Agent ,只需要在启动 JVM 时,设置以下参数:

    • ​com.sun.management.jmxremote.port=portNum​
    • 这里的 ​​portNum​​​是你想要开启 JMX/RMI 连接的端口。要确保被指定的端口是没有被使用的。除了发布用于本地访问的 RMI 连接器之外,设置这个属性,还会在私有的只读注册表发布一个额外的 RMI 连接器,这个连接器运行在指定的​​portNum​​​端口,使用众所周知的名称​​jmxrmi​​。

  • 注意:你必须在你设置的任何安全设置的基础上设置以上系统属性。这些安全设置描述如下:

    • 使用密码认证,具体查看​​官方文档​
    • 关闭密码认证

      • 密码认证对于远程监控是默认开启的,要关闭它,在启动 JVM 的时候设置以下系统属性:
        • ​com.sun.management.jmxremote.authenticate=false​
      • 注意:这个配置是不安全的,任何一个知道你的 JMX 端口和主机名的人都可以监控你的 Java 应用。对于开发环境,这是可以接受的,但在生产环境中,不建议这样做。

    • 使用 SSL,具体查看​​官方文档​
    • 关闭 SSL。进行远程监控时,要关闭 SSL,需要在启动 JVM 时设置以下系统属性:
      • ​com.sun.management.jmxremote.ssl=false​
    • 关闭安全认证,即同时关闭密码认证和SSL,需要在启动 JVM 时设置以下系统属性:

      • ​com.sun.management.jmxremote.authenticate=false​
      • ​com.sun.management.jmxremote.ssl=false​


  • 完整的配置。开启密码认证和SSL 的配置请小伙伴们参考文档自行配置,虽然麻烦但是应该不难。博主使用的是最简单的配置,具体如下:

    • ​com.sun.management.jmxremote.port=1111​
    • ​com.sun.management.jmxremote.authenticate=false​
    • ​com.sun.management.jmxremote.ssl=false​
    • 下面博主以 Tomcat 为例,进行演示:

      • 在 tomcat 的 ​​catalina.sh​​ 添加配置:
      • 启动 Tomcat 之后,通过​​jps​​​和 ​​jinfo​​查询配置信息:
      • 通过 netstat 查看端口情况。重点关注 1111 端口(JMX)



启动 JConsole



​jconsole​​可执行文件在 ​​JDK_HOME/bin​​中,这里的 ​​JDK_HOME​​是指 JDK 的安装路径。如果 JDK 环境变量已经配置好,只需要在终端输入 ​​jconsole​​即可启动。



效果如下图所示:


  • 图1:
    JVM 远程监控:JConsole 和 JVisualVM 的使用_远程监控
  • 图2:
    JVM 远程监控:JConsole 和 JVisualVM 的使用_远程服务器_02



注意:对于开发和原型设计,使用 ​​jconsole​​来监控本地应用是非常有用的。但是,对于生产环境,不建议使用,因为​​jconsole​​本身消耗大量的系统资源。进行远程监控,建议隔离​​jconsole​​和被监控平台。



连接远程服务器


  • 在上一步打开的窗口中,输入远程服务器 ip 和 jmx 端口号,进行连接。
  • 一般 5 秒内可以连接成功。

JVisualVM 远程监控

JVisualVM 简介

  • JConsole, jstat, jinfo, jstack 和 jmap 这些独立的工具,是 Java VisualVM 的一部分。Java VisualVM 通过结合使用这些工具来获取 JVM 的数据信息,进行重新组织,最后以图像的形式进行展示。另外,用户可以通过插件扩展 Java VisualVM 的功能。

启动 JVisualVM

  • 和 ​​jconsole​​​类似,配置好环境变量之后,只需要在终端输入 ​​jvisualvm​​即可启动。

连接远程服务器


  • 右键“远程”,选中“添加远程主机”:


    • JVM 远程监控:JConsole 和 JVisualVM 的使用_JVM_03
    • JVM 远程监控:JConsole 和 JVisualVM 的使用_tomcat_04


  • JMX 连接


    • 远程服务端的 JMX 的启动,参考上文 JConsole 的 ​开启远程监控和管理功能
    • 选择上一步创建的远程节点,右键“JMX 连接”:

      • JVM 远程监控:JConsole 和 JVisualVM 的使用_远程服务器_05

    • JVM 远程监控:JConsole 和 JVisualVM 的使用_远程服务器_06
    • 双击 JMX 节点,即可打开以下视图。由于当前没有安装任何插件,这个视图显示内容非常简单。
      JVM 远程监控:JConsole 和 JVisualVM 的使用_远程服务器_07


  • 安装插件

    • 工具-插件,打开插件视图。博主这里选择安装所有插件。


      • JVM 远程监控:JConsole 和 JVisualVM 的使用_tomcat_08
      • JVM 远程监控:JConsole 和 JVisualVM 的使用_远程服务器_09
      • JVM 远程监控:JConsole 和 JVisualVM 的使用_远程服务器_10
      • 注意:如果下载安装插件不成功。可以尝试开启代理。(博主的情况是:开启了代理之后才能下载安装成功)