当前位置: 首页 > article >正文

Spring Boot应用远程监控实战:用JConsole连接Docker容器里的JMX端口

Spring Boot应用远程监控实战用JConsole连接Docker容器里的JMX端口在云原生时代Spring Boot应用越来越多地运行在Docker容器中。当我们需要监控这些容器化应用的性能指标、内存使用情况或线程状态时JMXJava Management Extensions成为了一个不可或缺的工具。本文将深入探讨如何通过JConsole远程连接运行在Docker容器中的Spring Boot应用的JMX端口解决实际部署中常见的网络和配置问题。1. JMX与Docker监控基础JMX是Java平台的标准监控和管理接口它允许开发者通过MBeans管理Bean暴露应用的内部状态和操作。在Docker环境中使用JMX进行监控需要理解几个关键概念JMX本地连接当监控工具如JConsole和应用运行在同一台机器上时可以直接通过进程ID连接JMX远程连接需要配置特定的网络参数和端口映射才能实现跨机器或跨容器的监控Docker网络隔离容器默认的网络命名空间会阻止外部对JMX端口的访问在Spring Boot应用中启用JMX远程监控通常需要在启动时配置以下核心参数-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port9010 -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse -Djava.rmi.server.hostnamelocalhost2. Spring Boot中的JMX配置2.1 通过application.properties配置Spring Boot提供了简单的方式来配置JMX参数。在application.properties或application.yml中可以直接设置# 启用JMX spring.jmx.enabledtrue # 配置JMX域名 spring.jmx.default-domainmyapp # 自定义MBean服务器 spring.jmx.servermbeanServer对于需要远程连接的场景还需要在启动命令中添加额外的JVM参数java -jar myapp.jar \ -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port9010 \ -Dcom.sun.management.jmxremote.authenticatefalse \ -Dcom.sun.management.jmxremote.sslfalse \ -Djava.rmi.server.hostname127.0.0.12.2 通过环境变量配置在Docker环境中更推荐使用环境变量来传递这些参数。可以在Dockerfile中设置ENV JAVA_OPTS-Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port9010 \ -Dcom.sun.management.jmxremote.authenticatefalse \ -Dcom.sun.management.jmxremote.sslfalse \ -Djava.rmi.server.hostname127.0.0.1或者在docker-compose.yml中services: myapp: environment: - JAVA_OPTS-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port9010 -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse -Djava.rmi.server.hostname127.0.0.13. Docker网络配置与端口映射3.1 基础端口映射要让外部能够访问容器内的JMX端口需要在启动容器时进行端口映射docker run -p 9010:9010 my-spring-boot-app在docker-compose.yml中的等效配置services: myapp: ports: - 9010:90103.2 解决RMI注册端口问题JMX远程连接实际上会使用两个端口主连接端口配置的JMX端口动态分配的RMI注册端口要解决这个问题可以固定RMI注册端口-Dcom.sun.management.jmxremote.rmi.port9011然后在Docker中映射两个端口docker run -p 9010:9010 -p 9011:9011 my-spring-boot-app3.3 主机名问题在容器环境中java.rmi.server.hostname的设置尤为关键。常见解决方案使用宿主机IP不推荐缺乏灵活性-Djava.rmi.server.hostname192.168.1.100使用容器名称推荐在Docker网络中使用-Djava.rmi.server.hostnamemyapp使用host网络模式简化网络配置docker run --network host my-spring-boot-app4. 安全配置与生产环境建议4.1 基本认证配置在生产环境中应该启用JMX认证。首先创建密码文件echo monitor password123 jmxremote.password echo control password456 jmxremote.password chmod 600 jmxremote.password然后创建访问控制文件echo monitor readonly jmxremote.access echo control readwrite jmxremote.access在启动参数中引用这些文件-Dcom.sun.management.jmxremote.authenticatetrue -Dcom.sun.management.jmxremote.password.file/path/to/jmxremote.password -Dcom.sun.management.jmxremote.access.file/path/to/jmxremote.access4.2 SSL配置为了更高的安全性应该启用SSL加密生成密钥库keytool -genkey -alias jmx -keyalg RSA -keystore jmx.keystore -storepass changeit -keypass changeit -dname CNlocalhost配置JVM参数-Dcom.sun.management.jmxremote.ssltrue -Djavax.net.ssl.keyStore/path/to/jmx.keystore -Djavax.net.ssl.keyStorePasswordchangeit4.3 生产环境最佳实践使用专用监控网络隔离JMX流量定期轮换密码和SSL证书限制可访问JMX端口的IP范围考虑使用JMX代理或Prometheus JMX Exporter代替直接暴露JMX端口5. 常见问题排查5.1 连接超时问题当遇到连接超时时检查以下方面端口是否正确映射docker ps --format table {{.Names}}\t{{.Ports}}防火墙设置sudo ufw allow 9010/tcp sudo ufw allow 9011/tcp容器日志检查docker logs my-container5.2 认证失败问题认证失败的常见原因密码文件权限不正确必须为600用户名或密码拼写错误访问控制文件中的角色配置错误5.3 性能监控替代方案对于大规模部署考虑以下替代方案方案优点缺点Prometheus JMX Exporter适合大规模监控时间序列数据需要额外组件Spring Boot Actuator Micrometer与Spring生态集成好功能相对有限Commercial APM工具功能全面有专业支持成本较高6. 实战示例完整Docker部署下面是一个完整的Spring Boot应用Docker部署示例配置了可远程监控的JMXDockerfile:FROM openjdk:11-jre COPY target/myapp.jar /app.jar COPY jmxremote.password /etc/jmx/jmxremote.password COPY jmxremote.access /etc/jmx/jmxremote.access RUN chmod 600 /etc/jmx/jmxremote.password EXPOSE 8080 9010 9011 ENTRYPOINT [java, \ -Dcom.sun.management.jmxremote, \ -Dcom.sun.management.jmxremote.port9010, \ -Dcom.sun.management.jmxremote.rmi.port9011, \ -Dcom.sun.management.jmxremote.authenticatetrue, \ -Dcom.sun.management.jmxremote.sslfalse, \ -Djava.rmi.server.hostnamemyapp, \ -Dcom.sun.management.jmxremote.password.file/etc/jmx/jmxremote.password, \ -Dcom.sun.management.jmxremote.access.file/etc/jmx/jmxremote.access, \ -jar, /app.jar]docker-compose.yml:version: 3 services: myapp: build: . ports: - 8080:8080 - 9010:9010 - 9011:9011 hostname: myapp environment: - SPRING_PROFILES_ACTIVEprod启动并连接:docker-compose up -d jconsole myapp:9010在实际项目中根据网络环境和安全要求调整上述配置。特别是在生产环境中务必启用SSL加密并严格控制访问权限。

相关文章:

Spring Boot应用远程监控实战:用JConsole连接Docker容器里的JMX端口

Spring Boot应用远程监控实战:用JConsole连接Docker容器里的JMX端口 在云原生时代,Spring Boot应用越来越多地运行在Docker容器中。当我们需要监控这些容器化应用的性能指标、内存使用情况或线程状态时,JMX(Java Management Exte…...

如何快速实现croc项目的测试自动化:完整GitHub Actions CI/CD配置指南

如何快速实现croc项目的测试自动化:完整GitHub Actions CI/CD配置指南 【免费下载链接】croc Easily and securely send things from one computer to another :crocodile: :package: 项目地址: https://gitcode.com/GitHub_Trending/cr/croc croc是一个简单…...

CubiFS分布式锁性能:高并发场景测试终极指南

CubiFS分布式锁性能:高并发场景测试终极指南 【免费下载链接】cubefs cloud-native distributed storage 项目地址: https://gitcode.com/gh_mirrors/cu/cubefs CubiFS作为一款cloud-native distributed storage系统,其分布式锁机制在高并发场景下…...

Docker.DotNet 源码解析:深入理解 .NET Docker 客户端的实现原理

Docker.DotNet 源码解析:深入理解 .NET Docker 客户端的实现原理 【免费下载链接】Docker.DotNet :whale: .NET (C#) Client Library for Docker API 项目地址: https://gitcode.com/gh_mirrors/do/Docker.DotNet Docker.DotNet 是一个专为 .NET 开发者设计的…...

ANIMATEDIFF PRO应用案例:如何制作具有镜头推进感的AI动态视频?

ANIMATEDIFF PRO应用案例:如何制作具有镜头推进感的AI动态视频? 1. 认识电影级AI视频生成工具 1.1 什么是ANIMATEDIFF PRO ANIMATEDIFF PRO是基于AnimateDiff架构与Realistic Vision V5.1底座构建的高级文生视频渲染平台。它专为追求极致视觉效果与电…...

Bootlint与构建工具集成:Grunt和Gulp配置完整教程

Bootlint与构建工具集成:Grunt和Gulp配置完整教程 【免费下载链接】bootlint HTML linter for Bootstrap projects 项目地址: https://gitcode.com/gh_mirrors/bo/bootlint Bootlint是一款专为Bootstrap项目设计的HTML代码检查工具,能够帮助开发者…...

AcousticSense AI从零开始:搭建视觉化音频分析工作站完整指南

AcousticSense AI从零开始:搭建视觉化音频分析工作站完整指南 1. 项目介绍与核心价值 AcousticSense AI是一个创新的音频分析解决方案,它将音频处理与计算机视觉技术巧妙结合,让计算机能够"看见"音乐的本质。这个项目的核心思路很…...

微信聊天记录备份终极指南:用WeChatExporter永久保存你的珍贵回忆

微信聊天记录备份终极指南:用WeChatExporter永久保存你的珍贵回忆 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因手机丢失、系统升级或误操作而永…...

题解:洛谷 P1073 [NOIP 2009 提高组] 最优贸易

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...

彻底解决Windows音量栏干扰的专业方案:HideVolumeOSD技术深度解析

彻底解决Windows音量栏干扰的专业方案:HideVolumeOSD技术深度解析 【免费下载链接】HideVolumeOSD Hide the Windows 10 volume bar 项目地址: https://gitcode.com/gh_mirrors/hi/HideVolumeOSD 在Windows 10/11系统中,音量控制条(OS…...

告别iOS版本适配噩梦:Chameleon框架的智能依赖管理方案

告别iOS版本适配噩梦:Chameleon框架的智能依赖管理方案 【免费下载链接】chameleon Color framework for Swift & Objective-C (Gradient colors, hexcode support, colors from images & more). 项目地址: https://gitcode.com/gh_mirrors/ch/chameleon …...

Awakened PoE Trade终极指南:如何快速成为Path of Exile交易高手

Awakened PoE Trade终极指南:如何快速成为Path of Exile交易高手 【免费下载链接】awakened-poe-trade :heavy_dollar_sign: :hammer: Path of Exile app for price checking 项目地址: https://gitcode.com/gh_mirrors/aw/awakened-poe-trade 在《Path of E…...

从原理到实战:深度解析路由器四种NAT类型及其对网络应用的影响

1. 为什么你需要关心路由器的NAT类型? 每次打开在线游戏却总是匹配不到队友?视频会议时声音断断续续?远程访问家里NAS总是不成功?这些问题很可能和你的路由器NAT类型有关。NAT(网络地址转换)就像小区的门禁…...

嵌入式系统驱动的分层设计

一、架构设计总览 二、各层详细设计与实践 2.1 MCU 操作层 2.2 MCU 虚拟化层: 2.3 板件层(BSP): 三、总结 嵌入式系统驱动的分层设计是实现 “硬件与软件解耦”“提升开发效率”“降低移植成本” 的核心架构思路。结合主流 MCU …...

Python驱动CANoe自动化测试:从COM接口调用到Type Library解析的实战指南

1. 为什么选择Python驱动CANoe自动化测试 第一次接触CANoe自动化测试时,我尝试过用VB脚本和C#来调用COM接口,但最终发现Python才是最适合的选择。原因很简单:Python语法简洁,生态丰富,特别适合快速搭建测试框架。比如用…...

从零到一:用Metabase构建你的第一个数据看板

1. 为什么选择Metabase作为你的第一个数据看板工具 第一次接触数据可视化工具时,我被市面上各种复杂的BI工具搞得晕头转向。直到遇到Metabase,才发现原来搭建数据看板可以这么简单。作为一个完全开源的工具,Metabase最吸引我的是它"开箱…...

5分钟解锁图片转3D打印:开源神器ImageToSTL完全指南

5分钟解锁图片转3D打印:开源神器ImageToSTL完全指南 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left side. …...

rosenbridge项目工具集完整使用教程:探索x86 CPU硬件后门研究利器

rosenbridge项目工具集完整使用教程:探索x86 CPU硬件后门研究利器 【免费下载链接】rosenbridge Hardware backdoors in some x86 CPUs 项目地址: https://gitcode.com/gh_mirrors/ro/rosenbridge rosenbridge项目是一个专注于x86 CPU硬件后门研究的工具集&a…...

Windows触控板体验终极指南:mac-precision-touchpad驱动完全配置教程

Windows触控板体验终极指南:mac-precision-touchpad驱动完全配置教程 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precisi…...

uniapp跨端开发实战:支付宝小程序兼容性解决方案全解析

1. 支付宝小程序兼容性挑战概述 用uniapp开发微信小程序时,大多数开发者都会觉得"丝滑流畅",但一旦切换到支付宝小程序平台,各种兼容性问题就像打地鼠游戏一样接踵而至。我去年接手过一个跨端项目,原本在微信端运行良好…...

5步掌握Open WebUI:企业级自托管AI平台部署实战指南

5步掌握Open WebUI:企业级自托管AI平台部署实战指南 【免费下载链接】open-webui User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 项目地址: https://gitcode.com/GitHub_Trending/op/open-webui Open WebUI是一个功能丰富、可完全离线运行…...

5个实用技巧:让PySR符号回归在Windows系统稳定运行

5个实用技巧:让PySR符号回归在Windows系统稳定运行 【免费下载链接】PySR High-Performance Symbolic Regression in Python and Julia 项目地址: https://gitcode.com/gh_mirrors/py/PySR PySR(Python Symbolic Regression)是一个结合…...

智慧城市之红外墙面裂缝图像识别 外墙立面裂缝缺陷识别 建筑物渗水空洞图像识别 建筑物裂缝图像识别 建筑、基建领域缺陷检测 墙面温度图像识别

计算机视觉数据集 README数据集核心信息表维度详情类别目标检测任务专用,包含 3 个核心类别:裂缝、空洞、渗漏数量总计 362 张有效标注图像,覆盖不同场景下的目标特征,标注信息完整数据集格式种类图像文件(支持主流图像…...

从零到一:基于STM32与PWM的超声波雾化片驱动全解析

1. 超声波雾化片驱动原理揭秘 第一次接触超声波雾化片时,我盯着那个直径不到3cm的金属圆片看了半天——这玩意儿怎么就能把水变成雾气呢?后来拆解了几个报废的加湿器才明白,原来核心秘密在于压电效应。当给雾化片施加特定频率的交流电时&…...

从vue-print-nb到原生window.print:一次前端打印功能的技术选型踩坑实录

从vue-print-nb到原生window.print:前端打印功能的技术选型实战 最近在开发一个发票打印功能时,我深刻体会到了前端打印功能的复杂性。作为一个Vue项目,最初我理所当然地考虑使用现成的打印插件,但实际开发过程中却遇到了各种预料…...

题解:洛谷 AT_abc424_e [ABC424E] Cut in Half

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...

Kali Linux 2023.4 安装指南:从下载到避坑全攻略

1. Kali Linux 2023.4 安装前的准备工作 第一次接触Kali Linux的朋友可能会被它酷炫的黑客主题界面吸引,但安装过程往往让人头疼。作为安全测试领域的瑞士军刀,Kali Linux 2023.4版本在硬件兼容性和工具链上都有显著提升。我在实际安装过程中发现&#…...

Blankly实战案例:构建一个完整的量化交易系统

Blankly实战案例:构建一个完整的量化交易系统 【免费下载链接】blankly 🚀 💸 Easily build, backtest and deploy your algo in just a few lines of code. Trade stocks, cryptos, and forex across exchanges w/ one package. 项目地址:…...

【智能代码生成×可视化革命】:20年架构师亲授3大融合范式,错过再等5年?

第一章:智能代码生成与代码可视化融合的范式演进 2026奇点智能技术大会(https://ml-summit.org) 传统代码生成工具长期受限于“黑盒输出”模式——模型给出代码片段,开发者需手动验证、调试与重构。而新一代范式正将生成过程本身转化为可观察、可干预、…...

AIAPI代码生成已越过“可信阈值”:2026奇点大会认证的8类生产级可用场景(含金融/医疗/车规级落地清单)

第一章:2026奇点智能技术大会:AIAPI代码生成 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次将AIAPI(AI-Native API)代码生成列为核心议题,聚焦于模型驱动的接口契约自动生成、类型安全的客户端代码实时…...