Procházet zdrojové kódy

ZOOKEEPER-3845: Add metric JVM_PAUSE_TIME

Author: Jie Huang <jiehuang@fb.com>

Reviewers: Michael Han <hanm@apache.org>, Andor Molnar <andor@apache.org>, Enrico Olivelli <eolivelli@apache.org>, Mate Szalay-Beko <symat@apache.org>

Closes #1365 from jhuan31/ZOOKEEPER-3845
Jie Huang před 5 roky
rodič
revize
db99959ef3

+ 4 - 0
zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerMetrics.java

@@ -248,6 +248,8 @@ public final class ServerMetrics {
 
         RESPONSE_BYTES = metricsContext.getCounter("response_bytes");
         WATCH_BYTES = metricsContext.getCounter("watch_bytes");
+
+        JVM_PAUSE_TIME = metricsContext.getSummary("jvm_pause_time_ms", DetailLevel.ADVANCED);
     }
 
     /**
@@ -487,6 +489,8 @@ public final class ServerMetrics {
     public final Counter RESPONSE_BYTES;
     public final Counter WATCH_BYTES;
 
+    public final Summary JVM_PAUSE_TIME;
+
     private final MetricsProvider metricsProvider;
 
     public void resetAll() {

+ 4 - 1
zookeeper-server/src/main/java/org/apache/zookeeper/server/util/JvmPauseMonitor.java

@@ -28,6 +28,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import org.apache.zookeeper.server.ServerConfig;
+import org.apache.zookeeper.server.ServerMetrics;
 import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -191,8 +192,10 @@ public class JvmPauseMonitor {
                 }
                 long endTime = Instant.now().toEpochMilli();
                 long extraSleepTime = (endTime - startTime) - sleepTimeMs;
+                if (extraSleepTime >= 0) {
+                    ServerMetrics.getMetrics().JVM_PAUSE_TIME.add(extraSleepTime);
+                }
                 Map<String, GcTimes> gcTimesAfterSleep = getGcTimes();
-
                 if (extraSleepTime > warnThresholdMs) {
                     ++numGcWarnThresholdExceeded;
                     LOG.warn(formatMessage(extraSleepTime, gcTimesAfterSleep, gcTimesBeforeSleep));