summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-04-25 16:18:46 +0200
committerGitHub <noreply@github.com>2022-04-25 16:18:46 +0200
commit1098c95f952833cc725e9ede4bd78af90f6a625e (patch)
treece5f7c0b97151af269ec7c6cc831715f5485849b
parent2d2a7d4a0bd306c7f9056fe80514af2e3a7d2661 (diff)
parentda8e72f4ea80dd4a27ff2c7ca4ec955999de5fb4 (diff)
Merge pull request #22258 from vespa-engine/balder/report-direct-memory-usgae
Report direct memory usage
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java5
-rw-r--r--container-disc/src/main/java/com/yahoo/container/jdisc/metric/MetricUpdater.java35
-rw-r--r--container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java4
3 files changed, 35 insertions, 9 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java
index 3a8cf23a49e..1b6b43625f7 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java
@@ -191,6 +191,11 @@ public class VespaMetricSet {
metrics.add(new Metric("mem.heap.used.max"));
metrics.add(new Metric("jdisc.memory_mappings.max"));
metrics.add(new Metric("jdisc.open_file_descriptors.max"));
+ metrics.add(new Metric("mem.direct.total.average"));
+ metrics.add(new Metric("mem.direct.free.average"));
+ metrics.add(new Metric("mem.direct.used.average"));
+ metrics.add(new Metric("mem.direct.used.max"));
+ metrics.add(new Metric("mem.direct.count.max"));
metrics.add(new Metric("jdisc.gc.count.average"));
metrics.add(new Metric("jdisc.gc.count.max"));
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 8def68e9f04..62982d66978 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
@@ -5,7 +5,8 @@ import com.google.inject.Inject;
import com.yahoo.component.AbstractComponent;
import com.yahoo.jdisc.Metric;
import com.yahoo.jdisc.statistics.ContainerWatchdogMetrics;
-
+import java.lang.management.BufferPoolMXBean;
+import java.lang.management.ManagementFactory;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -23,9 +24,13 @@ import java.util.TimerTask;
*/
public class MetricUpdater extends AbstractComponent {
- private static final String FREE_MEMORY_BYTES = "mem.heap.free";
- private static final String USED_MEMORY_BYTES = "mem.heap.used";
- private static final String TOTAL_MEMORY_BYTES = "mem.heap.total";
+ private static final String HEAP_FREE_MEMORY_BYTES = "mem.heap.free";
+ private static final String HEAP_USED_MEMORY_BYTES = "mem.heap.used";
+ private static final String HEAP_TOTAL_MEMORY_BYTES = "mem.heap.total";
+ private static final String DIRECT_FREE_MEMORY_BYTES = "mem.direct.free";
+ private static final String DIRECT_USED_MEMORY_BYTES = "mem.direct.used";
+ private static final String DIRECT_TOTAL_MEMORY_BYTES = "mem.direct.total";
+ private static final String DIRECT_COUNT = "mem.direct.count";
private static final String MEMORY_MAPPINGS_COUNT = "jdisc.memory_mappings";
private static final String OPEN_FILE_DESCRIPTORS = "jdisc.open_file_descriptors";
@@ -96,16 +101,32 @@ public class MetricUpdater extends AbstractComponent {
this.jrtMetrics = new JrtMetrics(metric);
}
+ private void directMemoryUsed() {
+ long count = 0;
+ long used = 0;
+ long total = 0;
+ for (BufferPoolMXBean pool : ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class)) {
+ count += pool.getCount();
+ used += pool.getMemoryUsed();
+ total += pool.getTotalCapacity();
+ }
+ metric.set(DIRECT_FREE_MEMORY_BYTES, total - used, null);
+ metric.set(DIRECT_USED_MEMORY_BYTES, used, null);
+ metric.set(DIRECT_TOTAL_MEMORY_BYTES, total, null);
+ metric.set(DIRECT_COUNT, count, null);
+ }
+
@Override
public void run() {
long freeMemory = runtime.freeMemory();
long totalMemory = runtime.totalMemory();
long usedMemory = totalMemory - freeMemory;
- metric.set(FREE_MEMORY_BYTES, freeMemory, null);
- metric.set(USED_MEMORY_BYTES, usedMemory, null);
- metric.set(TOTAL_MEMORY_BYTES, totalMemory, null);
+ metric.set(HEAP_FREE_MEMORY_BYTES, freeMemory, null);
+ metric.set(HEAP_USED_MEMORY_BYTES, usedMemory, null);
+ metric.set(HEAP_TOTAL_MEMORY_BYTES, totalMemory, null);
metric.set(MEMORY_MAPPINGS_COUNT, count_mappings(), null);
metric.set(OPEN_FILE_DESCRIPTORS, count_open_files(), null);
+ directMemoryUsed();
containerWatchdogMetrics.emitMetrics(metric);
garbageCollectionMetrics.emitMetrics(metric);
diff --git a/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java
index 0701c5268b9..68d73a7914a 100644
--- a/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java
+++ b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java
@@ -20,14 +20,14 @@ import static org.mockito.Mockito.verify;
public class MetricUpdaterTest {
@Test
- public void metrics_are_updated_in_scheduler_cycle() throws InterruptedException {
+ public void metrics_are_updated_in_scheduler_cycle() {
int gcCount = ManagementFactory.getGarbageCollectorMXBeans().size();
Metric metric = mock(Metric.class);
ContainerWatchdogMetrics containerWatchdogMetrics = mock(ContainerWatchdogMetrics.class);
new MetricUpdater(new MockScheduler(), metric, containerWatchdogMetrics);
verify(containerWatchdogMetrics, times(1)).emitMetrics(any());
- verify(metric, times(5 + 2 * gcCount)).set(anyString(), any(), any());
+ verify(metric, times(9 + 2 * gcCount)).set(anyString(), any(), any());
}
private static class MockScheduler implements MetricUpdater.Scheduler {