1. 概述
监控 Java 应用的性能和稳定性是开发中的常规操作。Spring Boot 通过执行器提供了这种能力,但有时我们需要更细粒度的控制或更轻量级的实现方案。
Jolokia 通过 HTTP 接口暴露 JMX 操作,同时支持批量操作和安全机制,完美满足这类需求。
本文将演示如何在 Spring Boot 中集成 Jolokia。
2. 环境搭建
2.1. 依赖配置
首先添加 Jolokia 依赖,它会自动引入所需的服务库:
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-support-spring</artifactId>
<version>2.2.1</version>
</dependency>
2.2. 启用 Jolokia
Spring Boot 默认只暴露少量执行器接口,需在配置文件中显式启用 Jolokia:
management.endpoints.web.exposure.include=jolokia
完成以上配置后,启动应用即可访问 Jolokia 功能。
3. Jolokia 接口使用
Jolokia 提供多种操作命令:
✅ 核心命令列表:
read
:读取 MBean 属性write
:设置 MBean 属性exec
:执行 MBean 操作list
:列出所有 MBean 及其属性/操作search
:搜索 MBeanversion
:获取版本和服务器信息notification
:订阅通知
3.1. 版本查询
访问以下接口:
http://localhost:8080/actuator/jolokia/version
返回数据包含安全状态、代理配置等版本信息。
3.2. MBean 列表
执行 list
命令获取所有可用 MBean:
http://localhost:8080/actuator/jolokia/list
展示所有 MBean 及其允许的操作。
3.3. 属性读取
使用 read
命令获取堆内存使用情况:
http://localhost:8080/actuator/jolokia/read/java.lang:type=Memory/HeapMemoryUsage
清晰展示堆内存各指标值。
3.4. 操作执行
通过 exec
命令触发垃圾回收:
http://localhost:8080/actuator/jolokia/exec/java.lang:type=Memory/gc
返回 200 状态码表示操作成功。
⚠️ 注意:虽然操作简单,但必须严格控制权限,避免敏感操作被滥用。
4. 安全加固
Jolokia 默认暴露所有 JMX 资源,存在安全风险。需通过以下方式加固:
4.1. 禁用接口
生产环境可彻底禁用 Jolokia:
management.endpoint.jolokia.enabled=false
4.2. 访问控制
通过 jolokia-access.xml
配置安全规则(需放在 classpath 下)。
IP 限制
<restrict>
<remote>
<host>127.0.0.1</host>
</remote>
</restrict>
命令白名单
仅允许 read
和 list
命令:
<commands>
<command>read</command>
<command>list</command>
</commands>
MBean 级别控制
<allow>
<mbean>
<name>java.lang:type=Memory</name>
<operation>gc</operation>
</mbean>
</allow>
<deny>
<mbean>
<name>jdk.management.jfr:type=FlightRecorder</name>
<attribute>*</attribute>
<operation>*</operation>
</mbean>
</deny>
✅ 允许 Memory
MBean 的 gc
操作
❌ 禁止 FlightRecorder
MBean 的所有操作
5. 总结
本文演示了 Spring Boot 集成 Jolokia 的完整流程:
- 通过依赖和配置快速启用 Jolokia
- 使用核心命令实现 JMX 操作的 HTTP 访问
- 采用 IP 限制、命令白名单和 MBean 级别控制的三层安全策略
这种方案特别适合需要轻量级 JMX 监控的场景,但务必做好安全防护,避免踩坑。