aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin/src/main/java/com
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahooinc.com>2023-08-24 09:45:00 +0200
committerBjørn Christian Seime <bjorncs@yahooinc.com>2023-08-24 09:50:11 +0200
commit65655cbcadc890bcad907d6cc34995a926c29183 (patch)
treed0a80d02f648ca6981bea39c70e4073c2672fd5a /node-admin/src/main/java/com
parenta5b9150a448ed1c30d13c64055a0bc534a1b4a95 (diff)
Add additional metrics for container memory
Diffstat (limited to 'node-admin/src/main/java/com')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/cgroup/MemoryController.java17
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/ContainerStats.java8
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/ContainerStatsCollector.java6
3 files changed, 25 insertions, 6 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/cgroup/MemoryController.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/cgroup/MemoryController.java
index 840cd025917..3dc32e14a9d 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/cgroup/MemoryController.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/cgroup/MemoryController.java
@@ -31,9 +31,11 @@ public class MemoryController {
return cgroup.readIfExists("memory.current").map(Size::from);
}
- /** @return Number of bytes used to cache filesystem data, including tmpfs and shared memory. */
- public Size readFileSystemCache() {
- return Size.from(readField(cgroup.readLines("memory.stat"), "file"));
+ public Stats readStat() {
+ var lines = cgroup.readLines("memory.stat");
+ return new Stats(
+ Size.from(readField(lines, "file")), Size.from(readField(lines, "sock")), Size.from(readField(lines, "slab")),
+ Size.from(readField(lines, "slab_reclaimable")), Size.from(readField(lines, "anon")));
}
private static String readField(List<String> lines, String fieldName) {
@@ -45,4 +47,13 @@ public class MemoryController {
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("No such field: " + fieldName));
}
+
+ /**
+ * @param file Number of bytes used to cache filesystem data, including tmpfs and shared memory.
+ * @param sock Amount of memory used in network transmission buffers.
+ * @param slab Amount of memory used for storing in-kernel data structures.
+ * @param slabReclaimable Part of "slab" that might be reclaimed, such as dentries and inodes.
+ * @param anon Amount of memory used in anonymous mappings such as brk(), sbrk(), and mmap(MAP_ANONYMOUS).
+ */
+ public record Stats(Size file, Size sock, Size slab, Size slabReclaimable, Size anon) {}
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/ContainerStats.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/ContainerStats.java
index a5606784c12..1c02072ed2b 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/ContainerStats.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/ContainerStats.java
@@ -44,8 +44,14 @@ public record ContainerStats(Map<String, NetworkStats> networks,
* @param cache memory used by cache in bytes
* @param usage memory usage in bytes
* @param limit memory limit in bytes
+ * @param sock network transmission buffers in bytes
+ * @param slab in-kernel data structures in bytes
+ * @param slabReclaimable part of "slab" that might be reclaimed in bytes
+ * @param anon anonymous mappings in bytes
*/
- public record MemoryStats(long cache, long usage, long limit) {}
+ public record MemoryStats(long cache, long usage, long limit, long sock, long slab, long slabReclaimable, long anon) {
+ public MemoryStats(long cache, long usage, long limit) { this(cache, usage, limit, 0, 0, 0, 0); }
+ }
/**
* Statistics for CPU usage
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/ContainerStatsCollector.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/ContainerStatsCollector.java
index 8244666f9e0..0e16e2cabf6 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/ContainerStatsCollector.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/ContainerStatsCollector.java
@@ -105,8 +105,10 @@ class ContainerStatsCollector {
MemoryController memoryController = rootCgroup.resolveContainer(containerId).memory();
Size max = memoryController.readMax();
long memoryUsageInBytes = memoryController.readCurrent().value();
- long cachedInBytes = memoryController.readFileSystemCache().value();
- return new ContainerStats.MemoryStats(cachedInBytes, memoryUsageInBytes, max.isMax() ? -1 : max.value());
+ var stats = memoryController.readStat();
+ return new ContainerStats.MemoryStats(
+ stats.file().value(), memoryUsageInBytes, max.isMax() ? -1 : max.value(),
+ stats.sock().value(), stats.slab().value(), stats.slabReclaimable().value(), stats.anon().value());
}
private ContainerStats.NetworkStats collectNetworkStats(String iface, int containerPid) throws IOException {