summaryrefslogtreecommitdiffstats
path: root/java/com/google/gerrit/metrics/proc/ProcMetricModule.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/gerrit/metrics/proc/ProcMetricModule.java')
-rw-r--r--java/com/google/gerrit/metrics/proc/ProcMetricModule.java25
1 files changed, 25 insertions, 0 deletions
diff --git a/java/com/google/gerrit/metrics/proc/ProcMetricModule.java b/java/com/google/gerrit/metrics/proc/ProcMetricModule.java
index 09e40c1092..301ec85fca 100644
--- a/java/com/google/gerrit/metrics/proc/ProcMetricModule.java
+++ b/java/com/google/gerrit/metrics/proc/ProcMetricModule.java
@@ -34,6 +34,8 @@ import java.lang.management.ThreadMXBean;
import java.util.concurrent.TimeUnit;
public class ProcMetricModule extends MetricModule {
+ private static final ThreadMXBeanInterface threadMxBean = ThreadMXBeanFactory.create();
+
@Override
protected void configure(MetricMaker metrics) {
buildLabel(metrics);
@@ -167,6 +169,14 @@ public class ProcMetricModule extends MetricModule {
objectPendingFinalizationCount.set(memory.getObjectPendingFinalizationCount());
});
+
+ if (threadMxBean.supportsAllocatedBytes()) {
+ metrics.newCallbackMetric(
+ "proc/jvm/memory/allocated",
+ Long.class,
+ new Description("Allocated memory").setCumulative().setUnit(Units.BYTES),
+ () -> getTotalAllocatedBytes());
+ }
}
private void procJvmMemoryPool(MetricMaker metrics) {
@@ -312,4 +322,19 @@ public class ProcMetricModule extends MetricModule {
});
}
}
+
+ private static long getTotalAllocatedBytes() {
+ if (!threadMxBean.supportsAllocatedBytes()) {
+ return -1;
+ }
+
+ long[] ids = threadMxBean.getAllThreadIds();
+ long[] allocatedBytes = threadMxBean.getAllThreadsAllocatedBytes(ids);
+ long total = 0;
+
+ for (long a : allocatedBytes) {
+ total += a;
+ }
+ return total;
+ }
}