线程池的监控
线程池的监控
概述
线程池的监控是指对应用程序中使用的线程池进行实时跟踪、分析和管理的过程。线程池监控旨在确保线程池的有效运行,并及时发现并解决潜在的问题,以保障应用程序的性能和稳定性。
线程池监控最好支持三个地方:
动态调参:在运行时动态调整线程池参数,包括核心线程数、最大线程数、空闲线程超时时间、任务队列大小等
从前端接参,根据前端传的线程池名从map中获取线程池进行set方法动态修改(这个参数也可以持久化数据库)
通知报警:目前支持调参通知、活性、队列容量、拒绝策略、超时共六类通知报警维度,在运行时实时+定时检测,触发阈值进行推送
运行监控:定时采集线程池运行指标数据,提供 jsonlog、micrometer、endpoint、jmx 四种指标数据采集方式,可灵活选择
监控指标
- 核心参数:
- 线程池名称
- 基本配置:核心线程数、最大线程数
- 最大线程过期时间
- 任务队列类型、以及最大容量
- 拒绝策略
- 活跃度监控:
- 当前存在线程数、活跃线程数(通过get方法)
- 任务队列大小、任务队列剩余大小(通过get方法)
- 任务总数、完成任务数(通过get方法)、拒绝任务数(自定义拒绝策略进行统计,实现
RejectedExecutionHandler
)
- 过载监控:
- 执行超时任务数、排队超时任务数(在
excute
、beforeExecute
、afterExecute
统计时间,等待时间为开始时间-创建时间,需要传入相应的超时时间) - 利用率:活动线程数和最大线程数的比值
- tps(通过计算每秒完成的任务数)
- 执行超时任务数、排队超时任务数(在
可以在某些数据设置阈值(例如队列容量、超时任务、拒绝任务),超过通过邮件/短信通知警告
监控方法步骤
- 封装自己的线程池类,继承
ThreadPoolExecutor
重写各个方法例如execute
、beforeExecute
、afterExecute
,在这些方面里面进行相应的属性数据统计 - 定时去采集该线程池中的属性,存数据库
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 goMars的学习随记!
评论