diff options
Diffstat (limited to 'node-admin')
3 files changed, 15 insertions, 30 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Dimensions.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Dimensions.java index 5a542feb5c7..d29569945a8 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Dimensions.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Dimensions.java @@ -7,39 +7,14 @@ import java.util.Map; /** * @author freva */ -public class Dimensions { +public record Dimensions(Map<String, String> dimensionsMap) { public static final Dimensions NONE = new Dimensions(Map.of()); - private final Map<String, String> dimensionsMap; - public Dimensions(Map<String, String> dimensionsMap) { this.dimensionsMap = Map.copyOf(dimensionsMap); } - public Map<String, String> asMap() { - return dimensionsMap; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Dimensions that = (Dimensions) o; - return dimensionsMap.equals(that.dimensionsMap); - } - - @Override - public int hashCode() { - return dimensionsMap.hashCode(); - } - - @Override - public String toString() { - return dimensionsMap.toString(); - } - public static class Builder { private final Map<String, String> dimensionsMap = new HashMap<>(); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Metrics.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Metrics.java index f7fdf171fc1..07a8d545178 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Metrics.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Metrics.java @@ -117,7 +117,7 @@ public class Metrics { } } - // Used to distinguish whether metrics have been populated with all tag vaules + // Used to distinguish whether metrics have been populated with all tag values public enum DimensionType { /** Default metrics get added default dimensions set in check config */ DEFAULT, diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java index a112c0d2697..528383eb91e 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java @@ -52,6 +52,7 @@ public class NodeAdminImpl implements NodeAdmin { private final Gauge containerCount; private final Counter numberOfUnhandledExceptions; private final Metrics metrics; + private Dimensions previousMemoryOverheadDimensions = null; public NodeAdminImpl(NodeAgentFactory nodeAgentFactory, Metrics metrics, Clock clock, FileSystem fileSystem) { this(nodeAgentContext -> create(clock, nodeAgentFactory, nodeAgentContext), @@ -113,7 +114,7 @@ public class NodeAdminImpl implements NodeAdmin { @Override public void updateMetrics(boolean isSuspended) { - long numContainers = 0; + int numContainers = 0; long totalContainerMemoryBytes = 0; for (NodeAgentWithScheduler nodeAgentWithScheduler : nodeAgentWithSchedulerByHostname.values()) { @@ -139,11 +140,20 @@ public class NodeAdminImpl implements NodeAdmin { if (!isSuspended) { containerCount.sample(numContainers); ProcMeminfo meminfo = procMeminfoReader.read(); - metrics.declareGauge("mem.system.overhead", new Dimensions(Map.of("containers", Long.toString(numContainers)))) - .sample(meminfo.memTotalBytes() - meminfo.memAvailableBytes() - totalContainerMemoryBytes); + updateMemoryOverheadMetric(numContainers, meminfo.memTotalBytes() - meminfo.memAvailableBytes() - totalContainerMemoryBytes); } } + private void updateMemoryOverheadMetric(int numContainers, double memoryOverhead) { + final String name = "mem.system.overhead"; + Dimensions dimensions = new Dimensions(Map.of("containers", Integer.toString(numContainers))); + metrics.declareGauge(Metrics.APPLICATION_HOST, name, dimensions, Metrics.DimensionType.DEFAULT) + .sample(memoryOverhead); + if (previousMemoryOverheadDimensions != null && !previousMemoryOverheadDimensions.equals(dimensions)) + metrics.deleteMetricByDimension(name, previousMemoryOverheadDimensions, Metrics.DimensionType.DEFAULT); + previousMemoryOverheadDimensions = dimensions; + } + @Override public boolean setFrozen(boolean wantFrozen) { if (wantFrozen != previousWantFrozen) { |