Remove free memory and OS memory gauges
This commit is contained in:
parent
eb89773819
commit
d2ad003891
|
@ -1,32 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2013-2020 Signal Messenger, LLC
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.metrics;
|
|
||||||
|
|
||||||
import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name;
|
|
||||||
|
|
||||||
import com.sun.management.OperatingSystemMXBean;
|
|
||||||
import io.micrometer.core.instrument.Gauge;
|
|
||||||
import io.micrometer.core.instrument.MeterRegistry;
|
|
||||||
import io.micrometer.core.instrument.binder.MeterBinder;
|
|
||||||
import java.lang.management.ManagementFactory;
|
|
||||||
|
|
||||||
public class FreeMemoryGauge implements MeterBinder {
|
|
||||||
|
|
||||||
private final OperatingSystemMXBean operatingSystemMXBean;
|
|
||||||
|
|
||||||
public FreeMemoryGauge() {
|
|
||||||
this.operatingSystemMXBean = (com.sun.management.OperatingSystemMXBean)
|
|
||||||
ManagementFactory.getOperatingSystemMXBean();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void bindTo(final MeterRegistry registry) {
|
|
||||||
Gauge.builder(name(FreeMemoryGauge.class, "freeMemory"), operatingSystemMXBean,
|
|
||||||
OperatingSystemMXBean::getFreeMemorySize)
|
|
||||||
.register(registry);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -120,10 +120,7 @@ public class MetricsUtil {
|
||||||
|
|
||||||
public static void registerSystemResourceMetrics(final Environment environment) {
|
public static void registerSystemResourceMetrics(final Environment environment) {
|
||||||
new ProcessorMetrics().bindTo(Metrics.globalRegistry);
|
new ProcessorMetrics().bindTo(Metrics.globalRegistry);
|
||||||
new FreeMemoryGauge().bindTo(Metrics.globalRegistry);
|
|
||||||
new FileDescriptorMetrics().bindTo(Metrics.globalRegistry);
|
new FileDescriptorMetrics().bindTo(Metrics.globalRegistry);
|
||||||
new OperatingSystemMemoryGauge("Buffers").bindTo(Metrics.globalRegistry);
|
|
||||||
new OperatingSystemMemoryGauge("Cached").bindTo(Metrics.globalRegistry);
|
|
||||||
|
|
||||||
new JvmMemoryMetrics().bindTo(Metrics.globalRegistry);
|
new JvmMemoryMetrics().bindTo(Metrics.globalRegistry);
|
||||||
new JvmThreadMetrics().bindTo(Metrics.globalRegistry);
|
new JvmThreadMetrics().bindTo(Metrics.globalRegistry);
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2013-2020 Signal Messenger, LLC
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.metrics;
|
|
||||||
|
|
||||||
import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name;
|
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
|
||||||
import io.micrometer.core.instrument.Gauge;
|
|
||||||
import io.micrometer.core.instrument.MeterRegistry;
|
|
||||||
import io.micrometer.core.instrument.binder.MeterBinder;
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileReader;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
public class OperatingSystemMemoryGauge implements MeterBinder {
|
|
||||||
|
|
||||||
private final String metricName;
|
|
||||||
|
|
||||||
private static final File MEMINFO_FILE = new File("/proc/meminfo");
|
|
||||||
private static final Pattern MEMORY_METRIC_PATTERN = Pattern.compile("^([^:]+):\\s+([0-9]+).*$");
|
|
||||||
|
|
||||||
public OperatingSystemMemoryGauge(final String metricName) {
|
|
||||||
this.metricName = metricName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void bindTo(MeterRegistry registry) {
|
|
||||||
final String metricName = this.metricName;
|
|
||||||
Gauge.builder(name(OperatingSystemMemoryGauge.class, metricName.toLowerCase(Locale.ROOT)), () -> {
|
|
||||||
try (final BufferedReader bufferedReader = new BufferedReader(new FileReader(MEMINFO_FILE))) {
|
|
||||||
return getValue(bufferedReader.lines(), metricName);
|
|
||||||
} catch (final IOException e) {
|
|
||||||
return 0L;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.register(registry);
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
static double getValue(final Stream<String> lines, final String metricName) {
|
|
||||||
return lines.map(MEMORY_METRIC_PATTERN::matcher)
|
|
||||||
.filter(Matcher::matches)
|
|
||||||
.filter(matcher -> metricName.equalsIgnoreCase(matcher.group(1)))
|
|
||||||
.map(matcher -> Double.parseDouble(matcher.group(2)))
|
|
||||||
.findFirst()
|
|
||||||
.orElse(0d);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2013-2022 Signal Messenger, LLC
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.metrics;
|
|
||||||
|
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
import org.junit.jupiter.params.ParameterizedTest;
|
|
||||||
import org.junit.jupiter.params.provider.Arguments;
|
|
||||||
import org.junit.jupiter.params.provider.MethodSource;
|
|
||||||
|
|
||||||
class OperatingSystemMemoryGaugeTest {
|
|
||||||
|
|
||||||
private static final String MEMINFO =
|
|
||||||
"""
|
|
||||||
MemTotal: 16052208 kB
|
|
||||||
MemFree: 4568468 kB
|
|
||||||
MemAvailable: 7702848 kB
|
|
||||||
Buffers: 636372 kB
|
|
||||||
Cached: 5019116 kB
|
|
||||||
SwapCached: 6692 kB
|
|
||||||
Active: 7746436 kB
|
|
||||||
Inactive: 2729876 kB
|
|
||||||
Active(anon): 5580980 kB
|
|
||||||
Inactive(anon): 1648108 kB
|
|
||||||
Active(file): 2165456 kB
|
|
||||||
Inactive(file): 1081768 kB
|
|
||||||
Unevictable: 443948 kB
|
|
||||||
Mlocked: 4924 kB
|
|
||||||
SwapTotal: 1003516 kB
|
|
||||||
SwapFree: 935932 kB
|
|
||||||
Dirty: 28308 kB
|
|
||||||
Writeback: 0 kB
|
|
||||||
AnonPages: 5258396 kB
|
|
||||||
Mapped: 1530740 kB
|
|
||||||
Shmem: 2419340 kB
|
|
||||||
KReclaimable: 229392 kB
|
|
||||||
Slab: 408156 kB
|
|
||||||
SReclaimable: 229392 kB
|
|
||||||
SUnreclaim: 178764 kB
|
|
||||||
KernelStack: 17360 kB
|
|
||||||
PageTables: 50436 kB
|
|
||||||
NFS_Unstable: 0 kB
|
|
||||||
Bounce: 0 kB
|
|
||||||
WritebackTmp: 0 kB
|
|
||||||
CommitLimit: 9029620 kB
|
|
||||||
Committed_AS: 16681884 kB
|
|
||||||
VmallocTotal: 34359738367 kB
|
|
||||||
VmallocUsed: 41944 kB
|
|
||||||
VmallocChunk: 0 kB
|
|
||||||
Percpu: 4240 kB
|
|
||||||
HardwareCorrupted: 0 kB
|
|
||||||
AnonHugePages: 0 kB
|
|
||||||
ShmemHugePages: 0 kB
|
|
||||||
ShmemPmdMapped: 0 kB
|
|
||||||
FileHugePages: 0 kB
|
|
||||||
FilePmdMapped: 0 kB
|
|
||||||
CmaTotal: 0 kB
|
|
||||||
CmaFree: 0 kB
|
|
||||||
HugePages_Total: 0
|
|
||||||
HugePages_Free: 7
|
|
||||||
HugePages_Rsvd: 0
|
|
||||||
HugePages_Surp: 0
|
|
||||||
Hugepagesize: 2048 kB
|
|
||||||
Hugetlb: 0 kB
|
|
||||||
DirectMap4k: 481804 kB
|
|
||||||
DirectMap2M: 14901248 kB
|
|
||||||
DirectMap1G: 2097152 kB
|
|
||||||
""";
|
|
||||||
|
|
||||||
@ParameterizedTest
|
|
||||||
@MethodSource
|
|
||||||
void testGetValue(final String metricName, final long expectedValue) {
|
|
||||||
assertEquals(expectedValue, OperatingSystemMemoryGauge.getValue(MEMINFO.lines(), metricName));
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
private static Stream<Arguments> testGetValue() {
|
|
||||||
return Stream.of(
|
|
||||||
Arguments.of("MemTotal", 16052208L),
|
|
||||||
Arguments.of("Active(anon)", 5580980L),
|
|
||||||
Arguments.of("Committed_AS", 16681884L),
|
|
||||||
Arguments.of("HugePages_Free", 7L),
|
|
||||||
Arguments.of("NonsenseMetric", 0L)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit d9852e294a853b88c7feaa748e17fee38acbf849
|
Subproject commit 9b664d54d5d9a04a2c005ad376910001c11e47e4
|
Loading…
Reference in New Issue