JMX Trans启动报5555端口已占用故障排查
报错根因
报错是两个配置问题叠加导致的:
- 第一个问题是jmxtrans启动脚本默认会为自身进程开启JMX监控服务,默认监听端口就是
5555,和你给Kafka配置的JMX端口完全重合,Kafka已经先行绑定了5555端口,所以jmxtrans启动时尝试绑定同端口直接抛出Port already in use: 5555错误。
对应脚本里的默认配置逻辑:# 未手动传入JMX_PORT变量时,默认取值5555 JMX_PORT=${JMX_PORT:-"5555"} # 启动参数中强制开启自身JMX监听,绑定上述JMX_PORT MONITOR_OPTS=${MONITOR_OPTS:-"-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=${JMX_PORT}"} - 第二个问题是你jvm.json中配置的待采集Kafka地址端口错误:配置里填的
9072是Kafka的业务服务端口,不是JMX端口(你实际配置的Kafka JMX端口是5555)。这也解释了为什么你把JMX端口改成其他未占用端口后不再报端口占用,但会出现连接超时——此时jmxtrans自身可以正常启动,但它尝试用JMX协议连接Kafka的业务端口9072,协议不匹配、端口服务不对,自然连接失败。
修复步骤
- 处理jmxtrans自身端口冲突:启动jmxtrans时手动指定一个未被任何进程占用的端口作为jmxtrans自身的JMX监听端口,避开Kafka占用的5555,示例启动命令:
如果你不需要监控jmxtrans自身的JVM运行指标,也可以直接注释掉jmxtrans.sh脚本中定义JAR_FILE=jmxtrans-259-all.jar JMX_PORT=15555 jmxtrans.sh jvm.jsonMONITOR_OPTS的整行代码,彻底关闭jmxtrans自身的JMX监听功能,从根源避免这类端口冲突。 - 修正Kafka JMX采集配置:打开jvm.json,将
servers配置块下的port值从9072改为Kafka实际的JMX端口5555,同时确认host值填写为Kafka JMX配置中java.rmi.server.hostname对应的主机地址(即你配置的isstdkafld01),其余InfluxDB输出、指标采集规则保持原有配置即可。修正后的核心配置片段:{ "servers" : [ { "port" : "5555", "host" : "isstdkafld01", "alias": "kafka-1", "numQueryThreads" : 1, "queries" : [ // 原有查询、输出配置无需修改 ] } ] } - 完成上述修改后重新启动jmxtrans,即可正常采集Kafka JMX指标写入InfluxDB。
内容的提问来源于stack exchange,提问作者Bünyamin Şentürk
相关产品推荐
相关产品推荐

