summaryrefslogtreecommitdiffstats
path: root/container-disc
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahoo-inc.com>2016-11-25 13:27:44 +0100
committerArne H Juul <arnej@yahoo-inc.com>2016-11-25 13:35:46 +0100
commitab17df273eca533cf23c0be81e41b7530baf0039 (patch)
tree907ad9806b34521c63318f4a39bf9e88b042c842 /container-disc
parentadc898a83d37fb85131c87a971bd192e32f1f8d4 (diff)
count memory mappings in container
Diffstat (limited to 'container-disc')
-rw-r--r--container-disc/src/main/java/com/yahoo/container/jdisc/metric/MetricUpdater.java22
1 files changed, 22 insertions, 0 deletions
diff --git a/container-disc/src/main/java/com/yahoo/container/jdisc/metric/MetricUpdater.java b/container-disc/src/main/java/com/yahoo/container/jdisc/metric/MetricUpdater.java
index ab6e0b04085..e23844c65b7 100644
--- a/container-disc/src/main/java/com/yahoo/container/jdisc/metric/MetricUpdater.java
+++ b/container-disc/src/main/java/com/yahoo/container/jdisc/metric/MetricUpdater.java
@@ -3,6 +3,9 @@ package com.yahoo.container.jdisc.metric;
import java.util.Timer;
import java.util.TimerTask;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.Files;
import com.google.inject.Inject;
import com.yahoo.component.AbstractComponent;
@@ -23,6 +26,7 @@ public class MetricUpdater extends AbstractComponent {
private static final String MANHATTAN_FREE_MEMORY_BYTES = "mem.heap.free";
private static final String MANHATTAN_USED_MEMORY_BYTES = "mem.heap.used";
private static final String MANHATTAN_TOTAL_MEMORY_BYTES = "mem.heap.total";
+ private static final String MEMORY_MAPPINGS_COUNT = "memory_mappings_count";
private final Metric metric;
private final Timer timer = new Timer();
@@ -60,6 +64,24 @@ public class MetricUpdater extends AbstractComponent {
metric.set(MANHATTAN_FREE_MEMORY_BYTES, freeMemory, null);
metric.set(MANHATTAN_USED_MEMORY_BYTES, usedMemory, null);
metric.set(MANHATTAN_TOTAL_MEMORY_BYTES, totalMemory, null);
+ metric.set(MEMORY_MAPPINGS_COUNT, count_mappings(), null);
+ }
+
+ // Note: Linux-specific
+ private long count_mappings() {
+ long count = 0;
+ try {
+ Path p = Paths.get("/proc/self/maps");
+ byte[] data = Files.readAllBytes(p);
+ for (byte b : data) {
+ if (b == '\n') {
+ ++count;
+ }
+ }
+ } catch (Exception e) {
+ System.err.println("Could not read /proc/self/maps: " + e);
+ }
+ return count;
}
}
}