扩展java线程池功能,记录线程池的各项运行指标,如线程活跃数、队列使用数、平均执行时间、平均等待时间等。将信息保存到Elastic Search中,配合Grafana将数据可视化,并与钉钉结合实现预警功能。
并且通过配置中心,可以动态的设置线程池的参数,如核心线程数、最大线程数、队列容量和各种监控阈值参数。
最终和Grafana 搭配,可以实现如下效果
实时监测线程池的状态
监测线程池的如下信息:
Field | Type | Description |
key | String | 线程池唯一标识 |
name | String | 线程池名 |
queueFullWarning | Boolean | 队列是否长度超过阈值 |
queueWarningRatio | Double | 任务队列使用比例阈值 |
queueWarningSize | Integer | 任务队列预警长度 |
queueUseSize | Integer | 任务队列使用数量 |
queueCapacity | Integer | 队列容量 |
waitTimeoutCount | Long | 任务等待时间超过阈值的数量 |
execTimeoutCount | Long | 任务z执行时间超过阈值的数量 |
totalExecTime | Long | 任务执行总时长 |
avgExecTime | Integer | 任务平均执行总时长 |
completedTaskCount | Long | 任务完成数量 |
activeCount | Integer | 当前活跃的线程数 |
corePoolSize | Integer | 核心线程数量 |
maximumPoolSize | Long | 任务完成数量 |
waitTimeout | Long | 等待超时时间,毫秒 |
execTimeout | Long | 执行超时时间,毫秒 |
createTime | Long | 时间,毫秒 |
动态设置线程池参数
通过nacos动态设置线程池参数,可设置的线程池参数如下:
Field | Type | Description |
key | String | 线程池唯一标识 |
name | String | 线程池名称 |
queueWarningRatio | Double | 任务队列使用比例阈值 |
queueCapacity | int | 队列容量 |
waitTimeout | long | 任务等待时长阈值,单位毫秒 |
execTimeout | long | 任务执行时间阈值,单位毫秒 |
corePoolSize | int | 核心线程池数量 |
maximumPoolSize | int | 最大线程池数量 |
Spring线程池监控与动态配置实践
本文介绍了如何扩展Spring以实现线程池的实时监控,包括线程活跃数、队列使用数等关键指标的收集,并将数据存储至Elasticsearch,借助Grafana进行可视化展示和钉钉预警。同时,利用配置中心Nacos实现线程池参数的动态调整,如核心线程数、最大线程数等。
3282





