JMX 是 Java 世界的标准监控接口,ZooKeeper 也通过它暴露状态。这篇开启 JMX,用一个小 Java 程序连上去,把单机与集群节点注册的 MBean 和它们的属性、操作列出来。
org.apache.ZooKeeperService:name0=StandaloneServer_port7300 org.apache.ZooKeeperService:name0=StandaloneServer_port7300,name1=Connections,name2=127.0.0.1,name3=0x1000c57e25f0000 org.apache.ZooKeeperService:name0=StandaloneServer_port7300,name1=InMemoryDataTree
ATTR TickTime = 2000
ATTR MinSessionTimeout = 4000
ATTR MaxSessionTimeout = 40000
ATTR ClientPort = 7300
ATTR SecureClientPort =
ATTR MaxClientCnxnsPerHost = 60
ATTR NumAliveConnections = 1
ATTR OutstandingRequests = 0
ATTR PacketsReceived = 502
ATTR AvgRequestLatency = 17.4711
ATTR MaxRequestLatency = 21
ATTR Version = 3.9.6-${mvngit.commit.id}, built on 2026-09-14 21:34 UTC
可调用的操作: ['resetFsyncThresholdExceedCount', 'resetLatency', 'resetMaxLatency', 'resetAuthFailedCount', 'resetNonMTLSConnCount', 'resetStatistics']属性值与 mntr / Prometheus 里的同名指标同源(NumAliveConnections ↔ zk_num_alive_connections)。
leader(z64b-2):
name0=ReplicatedServer_id2
name0=ReplicatedServer_id2,name1=replica.1
name0=ReplicatedServer_id2,name1=replica.2
name0=ReplicatedServer_id2,name1=replica.2,name2=Leader
name0=ReplicatedServer_id2,name1=replica.2,name2=Leader,name3=InMemoryDataTree
name0=ReplicatedServer_id2,name1=replica.2,name2=Leader,name3=Learner_Connections,name4="127.0.0.1:58611",name5="id:1"
name0=ReplicatedServer_id2,name1=replica.2,name2=Leader,name3=Learner_Connections,name4="127.0.0.1:58614",name5="id:3"
name0=ReplicatedServer_id2,name1=replica.3
follower(z64b-1):
name0=ReplicatedServer_id1
name0=ReplicatedServer_id1,name1=replica.1
name0=ReplicatedServer_id1,name1=replica.1,name2=Follower
name0=ReplicatedServer_id1,name1=replica.1,name2=Follower,name3=InMemoryDataTree
name0=ReplicatedServer_id1,name1=replica.2
name0=ReplicatedServer_id1,name1=replica.3远程 JMX 如果不开认证,任何人连上就能调用 MBean 的操作;而且 JMX 基于 RMI,配置不当会有反序列化类的风险(这是通用的 Java 安全常识,本文没有测)。生产环境应当开认证 + SSL,或者干脆用 Prometheus 端点(第 63 篇)并关闭 JMX 远程端口。