
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.php.cn/link/018a6e33594cb40f782e50f71cf3c87f
注意事项
- 确保你的 Reactor 应用已启用 Micrometer 指标。
- 使用适当的监控工具(例如 Prometheus 和 Grafana)来收集和可视化指标。
- 根据你的应用程序需求调整监控指标和查询。
- 定期检查线程池的使用情况,并根据需要调整线程池的大小。
通过使用这些指标,你可以更好地了解 Reactor 调度器的线程池使用情况,并优化你的应用程序以获得更好的性能和可伸缩性。










