Skip to content

Commit f5a6c5c

Browse files
authored
[JVM] Fix maximum/total memory calculation (#3125)
Fixes #2609
1 parent a9868ff commit f5a6c5c

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

metrics-jvm/src/main/java/com/codahale/metrics/jvm/MemoryUsageGaugeSet.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ public Map<String, Metric> getMetrics() {
4747
mxBean.getNonHeapMemoryUsage().getInit());
4848
gauges.put("total.used", (Gauge<Long>) () -> mxBean.getHeapMemoryUsage().getUsed() +
4949
mxBean.getNonHeapMemoryUsage().getUsed());
50-
gauges.put("total.max", (Gauge<Long>) () -> mxBean.getHeapMemoryUsage().getMax() +
51-
mxBean.getNonHeapMemoryUsage().getMax());
50+
gauges.put("total.max", (Gauge<Long>) () -> mxBean.getNonHeapMemoryUsage().getMax() == -1 ?
51+
-1 : mxBean.getHeapMemoryUsage().getMax() + mxBean.getNonHeapMemoryUsage().getMax());
5252
gauges.put("total.committed", (Gauge<Long>) () -> mxBean.getHeapMemoryUsage().getCommitted() +
5353
mxBean.getNonHeapMemoryUsage().getCommitted());
5454

@@ -72,7 +72,7 @@ protected Ratio getRatio() {
7272
@Override
7373
protected Ratio getRatio() {
7474
final MemoryUsage usage = mxBean.getNonHeapMemoryUsage();
75-
return Ratio.of(usage.getUsed(), usage.getMax());
75+
return Ratio.of(usage.getUsed(), usage.getMax() == -1 ? usage.getCommitted() : usage.getMax());
7676
}
7777
});
7878

metrics-jvm/src/test/java/com/codahale/metrics/jvm/MemoryUsageGaugeSetTest.java

+19
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,16 @@ public void hasAGaugeForTotalMax() {
130130
.isEqualTo(44L);
131131
}
132132

133+
@Test
134+
public void hasAGaugeForTotalMaxWhenNonHeapMaxUndefined() {
135+
when(nonHeap.getMax()).thenReturn(-1L);
136+
137+
final Gauge gauge = (Gauge) gauges.getMetrics().get("total.max");
138+
139+
assertThat(gauge.getValue())
140+
.isEqualTo(-1L);
141+
}
142+
133143
@Test
134144
public void hasAGaugeForHeapCommitted() {
135145
final Gauge gauge = (Gauge) gauges.getMetrics().get("heap.committed");
@@ -210,6 +220,15 @@ public void hasAGaugeForNonHeapUsage() {
210220
.isEqualTo(0.75);
211221
}
212222

223+
@Test
224+
public void hasAGaugeForNonHeapUsageWhenNonHeapMaxUndefined() {
225+
when(nonHeap.getMax()).thenReturn(-1L);
226+
final Gauge gauge = (Gauge) gauges.getMetrics().get("non-heap.usage");
227+
228+
assertThat(gauge.getValue())
229+
.isEqualTo(3.0);
230+
}
231+
213232
@Test
214233
public void hasAGaugeForMemoryPoolUsage() {
215234
final Gauge gauge = (Gauge) gauges.getMetrics().get("pools.Big-Pool.usage");

0 commit comments

Comments
 (0)