diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerMetrics.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerMetrics.java index e3476ff6dd7..2b27a240fbf 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerMetrics.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerMetrics.java @@ -267,6 +267,9 @@ private ServerMetrics(MetricsProvider metricsProvider) { WATCH_BYTES = metricsContext.getCounter("watch_bytes"); JVM_PAUSE_TIME = metricsContext.getSummary("jvm_pause_time_ms", DetailLevel.ADVANCED); + JVM_HEAP_BYTES_USED = metricsContext.getSummary("jvm_mem_bytes_used", DetailLevel.ADVANCED); + JVM_HEAP_BYTES_MAX = metricsContext.getSummary("jvm_mem_bytes_max", DetailLevel.ADVANCED); + JVM_HEAP_BYTES_FREE = metricsContext.getSummary("jvm_mem_bytes_free", DetailLevel.ADVANCED); QUOTA_EXCEEDED_ERROR_PER_NAMESPACE = metricsContext.getCounterSet(QuotaMetricsUtils.QUOTA_EXCEEDED_ERROR_PER_NAMESPACE); } @@ -545,6 +548,12 @@ private ServerMetrics(MetricsProvider metricsProvider) { public final Summary JVM_PAUSE_TIME; + public final Summary JVM_HEAP_BYTES_USED; + + public final Summary JVM_HEAP_BYTES_MAX; + + public final Summary JVM_HEAP_BYTES_FREE; + public final CounterSet QUOTA_EXCEEDED_ERROR_PER_NAMESPACE; private final MetricsProvider metricsProvider; diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/JvmPauseMonitor.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/JvmPauseMonitor.java index cdefb5d297c..7bf3399a520 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/JvmPauseMonitor.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/util/JvmPauseMonitor.java @@ -205,6 +205,13 @@ public void run() { } totalGcExtraSleepTime += extraSleepTime; gcTimesBeforeSleep = gcTimesAfterSleep; + + long heapSize = Runtime.getRuntime().totalMemory(); + long heapMaxSize = Runtime.getRuntime().maxMemory(); + long heapFreeSize = Runtime.getRuntime().freeMemory(); + ServerMetrics.getMetrics().JVM_HEAP_BYTES_USED.add(heapSize); + ServerMetrics.getMetrics().JVM_HEAP_BYTES_MAX.add(heapMaxSize); + ServerMetrics.getMetrics().JVM_HEAP_BYTES_FREE.add(heapFreeSize); } }