JVM 远程监控:JConsole 和 JVisualVM 的使用
- 前言
- 官方文档
- 环境介绍
- JConsole 远程监控
- 开启远程监控和管理功能
- 启动 JConsole
- 连接远程服务器
- JVisualVM 远程监控
- JVisualVM 简介
- 启动 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:
- 图2:
注意:对于开发和原型设计,使用 jconsole
来监控本地应用是非常有用的。但是,对于生产环境,不建议使用,因为jconsole
本身消耗大量的系统资源。进行远程监控,建议隔离jconsole
和被监控平台。
连接远程服务器
- 在上一步打开的窗口中,输入远程服务器 ip 和 jmx 端口号,进行连接。
- 一般 5 秒内可以连接成功。
JVisualVM 远程监控
JVisualVM 简介
- JConsole, jstat, jinfo, jstack 和 jmap 这些独立的工具,是 Java VisualVM 的一部分。Java VisualVM 通过结合使用这些工具来获取 JVM 的数据信息,进行重新组织,最后以图像的形式进行展示。另外,用户可以通过插件扩展 Java VisualVM 的功能。
启动 JVisualVM
- 和
jconsole
类似,配置好环境变量之后,只需要在终端输入 jvisualvm
即可启动。
连接远程服务器
- 右键“远程”,选中“添加远程主机”:
- JMX 连接
- 远程服务端的 JMX 的启动,参考上文 JConsole 的 开启远程监控和管理功能
- 选择上一步创建的远程节点,右键“JMX 连接”:
- 双击 JMX 节点,即可打开以下视图。由于当前没有安装任何插件,这个视图显示内容非常简单。
- 安装插件
- 工具-插件,打开插件视图。博主这里选择安装所有插件。
- 注意:如果下载安装插件不成功。可以尝试开启代理。(博主的情况是:开启了代理之后才能下载安装成功)