嗨,我刚从动物园管理员身上拿走了一些数据...... 正如您所看到的,zk\_max\_latency非常高。但这是它达到的最大值还是总是当前值? echo mntr | nc localhost 2181 ...
该 `zk_max|avg|min_latency` 度量从ZK服务器启动开始计算。
该 mntr 命令由。处理 MonitorCommand ,查询来自的max / avg / min请求指标 ZooKeeperServer.serverStats.requestLatency
mntr
ZKDatabase zkdb = zkServer.getZKDatabase(); ServerStats stats = zkServer.serverStats(); print("version", Version.getFullVersion()); print("avg_latency", stats.getAvgLatency()); print("max_latency", stats.getMaxLatency()); print("min_latency", stats.getMinLatency());
ServerStats.java
// getters public long getMinLatency() { return requestLatency.getMin(); } public double getAvgLatency() { return requestLatency.getAvg(); } public long getMaxLatency() { return requestLatency.getMax(); }
并且请求延迟在更新时更新 ServerStats.updateLatency() 。核心实现类是 AvgMinMaxCounter 。
public void updateLatency(Request request, long currentTime) { long latency = currentTime - request.createTime; if (latency < 0) { return; } requestLatency.addDataPoint(latency); if (request.getHdr() != null) { // Only quorum request should have header ServerMetrics.UPDATE_LATENCY.add(latency); } else { // All read request should goes here ServerMetrics.READ_LATENCY.add(latency); } }