17370845950

使用 Micrometer 监控 Reactor 调度器的线程池

Reactor 提供了丰富的指标,允许你监控调度器。通过这些指标,你可以深入了解线程池的使用情况,从而优化你的 Reactor 应用。

Reactor 提供了多个指标,允许监控调度器:

  • executor_active_threads: gauge, 大致是正在积极执行任务的线程数
  • executor_pool_core_threads: gauge, 线程池的核心线程数
  • executor_pool_max_threads: gauge, 线程池允许的最大线程数
  • executor_pool_size_threads: gauge, 线程池的当前线程数
  • executor_completed_tasks_total: counter, 大致是已完成执行的任务总数
  • executor_queued_tasks: gauge, 大致是排队等待执行的任务数
  • executor_queue_remaining_tasks: gauge, 此队列在理想情况下可以接受的额外元素数量,而不会阻塞
  • executor_scheduled_once_total: counter, 只调度一次的任务总数
  • executor_scheduled_repetitively_total: counter, 重复调度的任务总数
  • executor: timer
    • executor_seconds_sum: counter
    • executor_seconds_count: counter
    • executor_seconds_max: gauge
  • executor.idle: timer
    • executor_idle_seconds_sum: counter
    • executor_idle_seconds_count: counter
    • executor_idle_seconds_max: gauge

在内部,Reactor 使用 ExecutorServiceMetrics 来检测调度器,并添加额外的标签,例如 reactor_scheduler_id。

监控线程数

要监控 Reactor 调度器中的线程数,可以使用以下PromQL查询:

sum(executor_pool_size_threads) by (reactor_scheduler_id)

这将按 reactor_scheduler_id 对线程池大小进行分组,并计算每个调度器的线程总数。

监控最大线程数

要监控 Reactor 调度器的最大线程数,可以使用以下PromQL查询:

sum(executor_pool_max_threads) by (reactor_scheduler_id)

这将按 reactor_scheduler_id 对最大线程数进行分组,并计算每个调度器的最大线程总数。

示例项目

Reactor 提供了一个演示项目,可用于尝试 Reactor 指标并使用 Grafana 仪表板:https://www./link/018a6e33594cb40f782e50f71cf3c87f

注意事项

  • 确保你的 Reactor 应用已启用 Micrometer 指标。
  • 使用适当的监控工具(例如 Prometheus 和 Grafana)来收集和可视化指标。
  • 根据你的应用程序需求调整监控指标和查询。
  • 定期检查线程池的使用情况,并根据需要调整线程池的大小。

通过使用这些指标,你可以更好地了解 Reactor 调度器的线程池使用情况,并优化你的应用程序以获得更好的性能和可伸缩性。