io.prometheus.client.hotspot.MemoryPoolsExports Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of simpleclient_hotspot Show documentation
Show all versions of simpleclient_hotspot Show documentation
Collectors of data from Java Hotspot.
package io.prometheus.client.hotspot;
import io.prometheus.client.Collector;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.MemoryUsage;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Pattern;
/**
* Exports metrics about JVM memory areas.
*
* Example usage:
*
* {@code
* new MemoryPoolsExports().register();
* }
*
* Example metrics being exported:
*
* jvm_memory_bytes_used{area="heap"} 2000000
* jvm_memory_bytes_committed{area="nonheap"} 200000
* jvm_memory_bytes_max{area="nonheap"} 2000000
* jvm_memory_pool_bytes_used{pool="PS Eden Space"} 2000
*
*/
public class MemoryPoolsExports extends Collector {
private final MemoryMXBean memoryBean;
private final List poolBeans;
public MemoryPoolsExports() {
this(
ManagementFactory.getMemoryMXBean(),
ManagementFactory.getMemoryPoolMXBeans());
}
public MemoryPoolsExports(MemoryMXBean memoryBean,
List poolBeans) {
this.memoryBean = memoryBean;
this.poolBeans = poolBeans;
}
void addMemoryAreaMetrics(List sampleFamilies) {
MemoryUsage heapUsage = memoryBean.getHeapMemoryUsage();
MemoryUsage nonHeapUsage = memoryBean.getNonHeapMemoryUsage();
ArrayList usedSamples = new ArrayList();
usedSamples.add(
new MetricFamilySamples.Sample(
"jvm_memory_bytes_used",
Arrays.asList("area"),
Arrays.asList("heap"),
heapUsage.getUsed()));
usedSamples.add(
new MetricFamilySamples.Sample(
"jvm_memory_bytes_used",
Arrays.asList("area"),
Arrays.asList("nonheap"),
nonHeapUsage.getUsed()));
sampleFamilies.add(
new MetricFamilySamples(
"jvm_memory_bytes_used",
Type.GAUGE,
"Used bytes of a given JVM memory area.",
usedSamples));
ArrayList committedSamples = new ArrayList();
committedSamples.add(
new MetricFamilySamples.Sample(
"jvm_memory_bytes_committed",
Arrays.asList("area"),
Arrays.asList("heap"),
heapUsage.getCommitted()));
committedSamples.add(
new MetricFamilySamples.Sample(
"jvm_memory_bytes_committed",
Arrays.asList("area"),
Arrays.asList("nonheap"),
nonHeapUsage.getCommitted()));
sampleFamilies.add(
new MetricFamilySamples(
"jvm_memory_bytes_committed",
Type.GAUGE,
"Committed (bytes) of a given JVM memory area.",
committedSamples));
ArrayList maxSamples = new ArrayList();
maxSamples.add(
new MetricFamilySamples.Sample(
"jvm_memory_bytes_max",
Arrays.asList("area"),
Arrays.asList("heap"),
heapUsage.getMax()));
maxSamples.add(
new MetricFamilySamples.Sample(
"jvm_memory_bytes_max",
Arrays.asList("area"),
Arrays.asList("nonheap"),
nonHeapUsage.getMax()));
sampleFamilies.add(
new MetricFamilySamples(
"jvm_memory_bytes_max",
Type.GAUGE,
"Maximum (bytes) of a given JVM memory area.",
maxSamples));
}
void addMemoryPoolMetrics(List sampleFamilies) {
ArrayList usedSamples = new ArrayList();
ArrayList committedSamples = new ArrayList();
ArrayList maxSamples = new ArrayList();
for (final MemoryPoolMXBean pool : poolBeans) {
MemoryUsage poolUsage = pool.getUsage();
usedSamples.add(
new MetricFamilySamples.Sample(
"jvm_memory_pool_bytes_used",
Arrays.asList("pool"),
Arrays.asList(pool.getName()),
poolUsage.getUsed()));
committedSamples.add(
new MetricFamilySamples.Sample(
"jvm_memory_pool_bytes_committed",
Arrays.asList("pool"),
Arrays.asList(pool.getName()),
poolUsage.getCommitted()));
maxSamples.add(
new MetricFamilySamples.Sample(
"jvm_memory_pool_bytes_max",
Arrays.asList("pool"),
Arrays.asList(pool.getName()),
poolUsage.getMax()));
}
sampleFamilies.add(
new MetricFamilySamples(
"jvm_memory_pool_bytes_used",
Type.GAUGE,
"Used bytes of a given JVM memory pool.",
usedSamples));
sampleFamilies.add(
new MetricFamilySamples(
"jvm_memory_pool_bytes_committed",
Type.GAUGE,
"Limit (bytes) of a given JVM memory pool.",
committedSamples));
sampleFamilies.add(
new MetricFamilySamples(
"jvm_memory_pool_bytes_max",
Type.GAUGE,
"Max (bytes) of a given JVM memory pool.",
maxSamples));
}
public List collect() {
List mfs = new ArrayList();
addMemoryAreaMetrics(mfs);
addMemoryPoolMetrics(mfs);
return mfs;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy