JVM 指标
Micrometer 提供了多个用于监控 JVM 的绑定器:
new ClassLoaderMetrics().bindTo(registry); 1
new JvmMemoryMetrics().bindTo(registry); 2
new JvmGcMetrics().bindTo(registry); 3
new ProcessorMetrics().bindTo(registry); 4
new JvmThreadMetrics().bindTo(registry); 5
new JvmThreadDeadlockMetrics().bindTo(registry); 6
测量已加载和卸载的类。
测量缓冲区和内存池的利用率。
测量最大和实时数据大小、提升和分配速率,以及 GC 暂停的次数(或在 CMS 情况下的并发阶段时间)。
测量当前 CPU 总使用率和负载平均值。
测量线程峰值、守护线程数量和活动线程数量。
测量死锁线程的数量。
Micrometer 还提供了一个用于 ExecutorService
的仪表绑定器。你可以对你的 ExecutorService
进行监控,如下所示:
new ExecutorServiceMetrics(executor, executorServiceName, tags).bindTo(registry);
从 ExecutorService
创建的指标会根据其类型而有所不同。
对于 ThreadPoolExecutor
,提供了以下指标:
-
executor.completed
(FunctionCounter
): 已完成执行的任务的大致总数。 -
executor.active
(Gauge
): 当前正在执行任务的线程的大致数量。 -
executor.queued
(Gauge
): 排队等待执行的任务的大致数量。 -
executor.pool.size
(Gauge
): 线程池中当前的线程数量。
对于 ForkJoinPool
,提供了以下指标:
-
executor.steals
(FunctionCounter
): 估计从另一个线程的工作队列中窃取的任务总数。当线程池未处于静止状态时,报告的值会低估实际的窃取总数。 -
executor.queued
(Gauge
): 估计当前由工作线程持有的队列中的任务总数。 -
executor.active
(Gauge
): 估计当前正在窃取或运行任务的线程数。 -
executor.running
(Gauge
): 估计未阻塞但正在等待加入任务或其他受管理的同步线程的工作线程数。 -
executor.parallelism
(Gauge
): 该线程池的目标并行度级别。 -
executor.pool.size
(Gauge
): 线程池中当前的线程数。
Java 21 指标
Micrometer 提供了对 Java 21 中发布的虚拟线程的支持。为了使用它,你需要在类路径中添加 io.micrometer:micrometer-java21
依赖项以使用绑定器:
new VirtualThreadMetrics().bindTo(registry);
绑定器测量虚拟线程被固定的持续时间(并计算事件的数量);同时计算启动或取消停放虚拟线程失败时的事件数量。