diff options
author | Arne H Juul <arnej@yahoo-inc.com> | 2016-11-25 13:27:44 +0100 |
---|---|---|
committer | Arne H Juul <arnej@yahoo-inc.com> | 2016-11-25 13:35:46 +0100 |
commit | ab17df273eca533cf23c0be81e41b7530baf0039 (patch) | |
tree | 907ad9806b34521c63318f4a39bf9e88b042c842 /container-disc/src/main/java/com/yahoo/container | |
parent | adc898a83d37fb85131c87a971bd192e32f1f8d4 (diff) |
count memory mappings in container
Diffstat (limited to 'container-disc/src/main/java/com/yahoo/container')
-rw-r--r-- | container-disc/src/main/java/com/yahoo/container/jdisc/metric/MetricUpdater.java | 22 |
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; } } } |