公司动态

TongWeb8 JMX服务配置与监控数据采集实战

📅 2026/7/14 20:21:09
TongWeb8 JMX服务配置与监控数据采集实战
1. TongWeb8 JMX服务基础配置TongWeb8作为国产JavaEE应用服务器其JMX服务默认处于关闭状态。开启JMX服务是监控JVM运行状态、采集性能指标的关键前提。这里我结合实战经验分享两种最常用的开启方式。1.1 控制台可视化配置对于刚接触TongWeb的运维人员推荐通过管理控制台操作登录https://服务器IP:9060/console注意使用HTTPS协议在左侧导航栏找到JVM配置JMX服务勾选启用JMX远程连接选项设置监听端口建议使用7200-7300范围配置认证信息用户名建议使用monitor等非管理员账户密码需包含大小写字母和数字如Monitor123!点击保存后需重启实例生效这种方式的优势是操作直观我在给客户做培训时发现即使没有Java基础的管理员也能快速上手。但要注意控制台修改会实时写入domain.xml建议操作前先备份配置文件。1.2 配置文件手动修改在生产环境中我更推荐直接修改配置文件这样可以实现批量部署。具体步骤!-- 修改${tongweb.home}/domains/domain1/config/domain.xml -- jmx-connector enabledtrue port7200 security enabledtrue/ auth user usernamemonitor password{AES}加密后的密码/ /auth /jmx-connector密码加密建议使用TongWeb提供的工具类cd ${tongweb.home}/bin ./tw_encrypt.sh 明文密码我曾遇到过客户直接填写明文密码导致的安全事件所以务必注意加密后的密码以{AES}前缀标识不同版本加密方式可能不同V8.0后统一采用AES修改后需要执行./stopserver.sh ./startd.sh重启2. JMX监控数据采集实战开启服务只是第一步如何高效采集数据才是核心。根据不同的监控体系我总结出三种典型方案。2.1 Java客户端直连方案适合需要深度定制监控指标的场景示例代码改进版public class AdvancedJmxClient { private static final String JMX_URL service:jmx:rmi://%s:%d/jndi/rmi://%s:%d/server; public static MapString, Object collectMetrics(String ip, int port, String user, String password) throws Exception { JMXServiceURL url new JMXServiceURL( String.format(JMX_URL, ip, port, ip, port)); MapString, Object env new HashMap(); env.put(JMXConnector.CREDENTIALS, new String[]{user, password}); try (JMXConnector connector JMXConnectorFactory.connect(url, env)) { MBeanServerConnection connection connector.getMBeanServerConnection(); // 获取内存指标 ObjectName heapObjName new ObjectName( java.lang:typeMemory); MemoryUsage heapUsage (MemoryUsage) connection.getAttribute( heapObjName, HeapMemoryUsage); // 获取线程数 ObjectName threadObjName new ObjectName( java.lang:typeThreading); int threadCount (int) connection.getAttribute( threadObjName, ThreadCount); return Map.of( heapUsed, heapUsage.getUsed(), heapMax, heapUsage.getMax(), threads, threadCount ); } } }这段代码相比官方示例有几个优化点使用try-with-resources确保连接关闭封装常用指标采集逻辑返回结构化数据而非直接输出增加异常处理机制示例中省略2.2 Prometheus集成方案对于云原生环境PrometheusJMX Exporter是更现代的方案下载jmx_prometheus_javaagent.jarwget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.18.0/jmx_prometheus_javaagent-0.18.0.jar -P ${tongweb.home}/lib创建配置文件jmx_config.ymlrules: - pattern: java.langtypeMemory(HeapMemoryUsage|NonHeapMemoryUsage) name: jvm_memory_usage labels: area: $1 - pattern: java.langtypeThreading(ThreadCount|DaemonThreadCount) name: jvm_threads修改启动参数# 在${tongweb.home}/bin/startd.sh中添加 JAVA_OPTS$JAVA_OPTS -javaagent:../lib/jmx_prometheus_javaagent.jar9090:../conf/jmx_config.yml这样配置后Prometheus可以通过http://服务器IP:9090/metrics获取标准格式的监控数据。我在金融客户的生产环境中实测单个实例采集耗时从原来的200ms降低到50ms左右。3. 安全加固与性能优化3.1 安全防护措施JMX开放会带来安全风险必须做好防护网络隔离配置安全组只允许监控服务器IP访问JMX端口SSL加密在domain.xml中增加jmx-connector ssl-enabledtrue ssl protocolTLSv1.2 keystore${tongweb.home}/cert/tongweb.jks keystore-passwordchangeit/ /jmx-connector审计日志启用JMX操作审计# 在管理控制台开启 监控配置 JMX审计 启用操作日志3.2 性能调优建议高并发场景下JMX可能影响性能建议控制采集频率不低于30秒/次对MBean做分类采集避免一次性获取所有指标使用批处理模式// 批量获取多个属性 String[] attributes {HeapMemoryUsage, ThreadCount}; AttributeList attrs connection.getAttributes(objName, attributes);对于集群环境采用轮询方式分散采集压力4. 监控指标解析与应用4.1 核心监控指标清单根据多年运维经验这些指标最关键指标类别MBean路径关键属性告警阈值内存java.lang:typeMemoryHeapMemoryUsage/NonHeapMemoryUsage80%堆内存使用线程java.lang:typeThreadingThreadCount/PeakThreadCount500活动线程CPUjava.lang:typeOperatingSystemProcessCpuLoad70%持续5分钟类加载java.lang:typeClassLoadingLoadedClassCount持续下降需警惕4.2 故障诊断案例去年某证券客户出现交易延迟通过JMX发现JVM老年代内存持续增长通过MemoryPool MXBean存在大量BLOCKED线程通过Thread MXBean最终定位到是数据库连接泄漏排查时特别有用的命令// 获取死锁信息 ThreadMXBean threadMxBean ManagementFactory.getThreadMXBean(); long[] deadlockedThreads threadMxBean.findDeadlockedThreads();5. 常见问题解决方案5.1 连接失败排查步骤基础检查telnet 目标IP 7200 # 测试端口连通性 netstat -tlnp | grep 7200 # 检查监听状态权限问题检查domain.xml中密码是否加密特殊字符需要转义版本兼容跨版本连接时需保持JMX协议一致5.2 数据采集优化对于大规模部署建议使用连接池管理JMX连接采用异步采集避免阻塞重要指标设置本地缓存最后分享一个真实踩坑经历某次升级后JMX突然失效原因是新版本加密算法变更但文档未更新。现在我的检查清单里总会多一步验证加密方式。