线程池主要指标和监控-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,这是自动的, 否则还需要手动清除


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM