线程池主要指标和监控-prometheus

指标收集参考
https://www.cnblogs.com/throwable/p/10708351.html
https://blog.csdn.net/IT___zhao/article/details/107596427

主要指标和实现方式

ThreadPoolExecutor中提供的度量数据项获取方式

ThreadPoolExecutor中提供的度量数据项和micrometer对应的Tag的映射关系:
线程池名称,Tag:thread.pool.name,这个很重要,用于区分各个线程池的数据,如果使用IOC容器管理,可以使用BeanName代替。
int getCorePoolSize():核心线程数,metrics:thread.pool.core.size。
int getLargestPoolSize():历史峰值线程数,metrics:thread.pool.largest.size。
int getMaximumPoolSize():最大线程数(线程池线程容量),metrics:thread.pool.max.size。
int getActiveCount():当前活跃线程数,metrics:thread.pool.active.size。
int getPoolSize():当前线程池中运行的线程总数(包括核心线程和非核心线程),metrics:thread.pool.thread.count。
当前任务队列中积压任务的总数,Tag:thread.pool.queue.size,这个需要动态计算得出。
getKeepAliveTime : 获取线程最长的休眠时间
getTaskCount:返回线程池总共执行过的任务数--近似值
getCompletedTaskCount:返回线程池总共完成过的任务数--近似值

以上指标部分需要加锁并根据队列的状态进行获取 ,所以监控的频率不要太快 , 以免影响效率. 另外, 监控主要是为了发现异常情况 , 比如执行很慢的任务,所以采样频率也不需要很快.

注意事项

四种引用的使用和特点, 参考
https://www.cnblogs.com/nullzx/p/7406151.html

因为监控时需要引用线程池对象 , 所以对于可能会销毁的线程池 , 最好使用弱引用,避免内存泄露.
虚引用的主要特点:

  • 在垃圾回收器线程扫描它 所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
  • 强 >软>弱>虚
  • 当软引用(或弱引用,或虚引用)对象所指向的对象被回收了,那么这个引用对象本身就没有价值了,如果程序中存在大量的这类对象(注意,我们创建的软引用、弱引用、虚引用对象本身是个强引用,不会自动被gc回收),就会浪费内存。因此我们这就可以手动回收位于引用队列(ReferenceQueue)中的引用对象本身. 不过,弱引用最好使用WeakHashMap, 不使用ReferenceQueue, 因为当我们调用WeakHashMap 的get和put方法会有一个副作用,即清除无效key对应的Entry,这是自动的, 否则还需要手动清除
posted @   rudolf_lin  阅读(1881)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示