diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index 064739c98..62cc389da 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -87,6 +87,8 @@ import org.whispersystems.textsecuregcm.mappers.RateLimitExceededExceptionMapper import org.whispersystems.textsecuregcm.metrics.CpuUsageGauge; import org.whispersystems.textsecuregcm.metrics.FileDescriptorGauge; import org.whispersystems.textsecuregcm.metrics.FreeMemoryGauge; +import org.whispersystems.textsecuregcm.metrics.GarbageCollectionCountGauge; +import org.whispersystems.textsecuregcm.metrics.GarbageCollectionTimeGauge; import org.whispersystems.textsecuregcm.metrics.MetricsApplicationEventListener; import org.whispersystems.textsecuregcm.metrics.NetworkReceivedGauge; import org.whispersystems.textsecuregcm.metrics.NetworkSentGauge; @@ -447,6 +449,8 @@ public class WhisperServerService extends Application webSocketEnvironment, WebSocketEnvironment provisioningEnvironment) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/AbstractGarbageCollectionGauge.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/AbstractGarbageCollectionGauge.java new file mode 100644 index 000000000..9a35ec457 --- /dev/null +++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/AbstractGarbageCollectionGauge.java @@ -0,0 +1,19 @@ +package org.whispersystems.textsecuregcm.metrics; + +import com.codahale.metrics.Gauge; + +import java.lang.management.GarbageCollectorMXBean; +import java.lang.management.ManagementFactory; + +abstract class AbstractGarbageCollectionGauge implements Gauge { + + private final GarbageCollectorMXBean garbageCollectorMXBean; + + public AbstractGarbageCollectionGauge() { + this.garbageCollectorMXBean = (GarbageCollectorMXBean)ManagementFactory.getGarbageCollectorMXBeans(); + } + + protected GarbageCollectorMXBean getGarbageCollectorMXBean() { + return garbageCollectorMXBean; + } +} diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/GarbageCollectionCountGauge.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/GarbageCollectionCountGauge.java new file mode 100644 index 000000000..f370062ad --- /dev/null +++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/GarbageCollectionCountGauge.java @@ -0,0 +1,12 @@ +package org.whispersystems.textsecuregcm.metrics; + +/** + * A gauge that reports the total number of collections that have occurred in this JVM's lifetime. + */ +public class GarbageCollectionCountGauge extends AbstractGarbageCollectionGauge { + + @Override + public Long getValue() { + return getGarbageCollectorMXBean().getCollectionCount(); + } +} diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/GarbageCollectionTimeGauge.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/GarbageCollectionTimeGauge.java new file mode 100644 index 000000000..3b035a300 --- /dev/null +++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/GarbageCollectionTimeGauge.java @@ -0,0 +1,12 @@ +package org.whispersystems.textsecuregcm.metrics; + +/** + * A gauge that reports the cumulative amount of time (in milliseconds) spent on garbage collection. + */ +public class GarbageCollectionTimeGauge extends AbstractGarbageCollectionGauge { + + @Override + public Long getValue() { + return getGarbageCollectorMXBean().getCollectionTime(); + } +}