一、背景

需求:动态调整参数、细粒度监控、秒级监控

线程池参数调优,需要不断的进行测试,判断内存占用等因素,调优没法热部署

别再纠结线程池大小了,没有固定公式

二、美团DynamicTp

dynamictp官网
源码
掘金专栏
Java线程池实现原理及其在美团业务中的实践

(一)核心功能

  • 动态调参

    • 线程池的核心大小
    • 最大线程大小
    • 队列长度
  • 任务监控
    • 线程池的任务执行情况
    • 最大任务执行时间
    • 平均任务执行时间
  • 负载告警
    • 线程池负载数达到一定的阈值
  • 操作日志
    • 参看线程池参数的修改记录

原理

(1)动态更新

直接调用 JDK 的 setCoreThreadSize等方法(public)

(2)监控

作为Bean注入容器,修改配置后,通过发布Eventt,异步通知到钉钉群

(3)注意事项

1.普通 JUC 线程池想要被监控,可以 @Bean 定义时加 @DynamicTp 注解

2.动态线程池实例服务启动时会根据配置中心的配置动态注册到Spring容器中,建议不要用@Bean编程式重复声明同一线程池实例,直接配置在配置中心就行

3.阻塞队列只有 VariableLinkedBlockingQueue 类型可以修改 capacity。

该类型功能和 LinkedBlockingQueue 相似, 只是 capacity 不是 final 类型,可以修改,VariableLinkedBlockingQueue 参考 RabbitMq 的实现

(二)adapter模块

功能解读

主要是用来适配一些第三方组件的线程池管理,让第三方组件内置的线程池也能享受到动态参数调整,监控告警这些增强功能。

1,Jetty
2,Undertow
3,Dubbo线程池
4,RocketMq
5,Hystrix

三、案例

【JUC】动态线程池相关推荐

  1. 美团动态线程池实践思路开源项目(DynamicTp),线程池源码解析及通知告警篇

    大家好,这篇文章我们来聊下动态线程池开源项目(DynamicTp)的通知告警模块.目前项目提供以下通知告警功能,每一个通知项都可以独立配置是否开启.告警阈值.告警间隔时间.平台等,具体代码请看core ...

  2. 美团动态线程池实践思路,开源了

    大家好,今天我们来聊一个比较实用的话题,动态可监控的线程池实践,全新开源项目(DynamicTp)地址在文章末尾,欢迎交流学习. 写在前面 稍微有些Java编程经验的小伙伴都知道,Java的精髓在ju ...

  3. 美团动态线程池实践思路已开源

    项目地址 gitee地址:gitee.com/yanhom/dyna- github地址:github.com/lyh200/dyna- 系列文章 动态线程池框架(DynamicTp),监控及源码解析 ...

  4. 美团动态线程池开源框架 DynamicTp

    背景 使用线程池 ThreadPoolExecutor 过程中你是否有以下痛点呢? 1.代码中创建了一个 ThreadPoolExecutor,但是不知道那几个核心参数设置多少比较合适 2.凭经验设置 ...

  5. linux动态线程池--原理,这儿的代码不完整

    本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关.另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量.文章的最后,我们 ...

  6. apollo源码分析 感知_Kitty中的动态线程池支持Nacos,Apollo多配置中心了

    目录 回顾昨日 nacos 集成 Spring Cloud Alibaba 方式 Nacos Spring Boot 方式 Apollo 集成 自研配置中心对接 无配置中心对接 实现源码分析 兼容 A ...

  7. 轻量级动态线程池才是“王道”?

    一.前言 最初设计 Hippo4j 的初衷是尽可能提高以及保障线程池对于线上应用的作用,所以加了很多个性化功能,这也间接导致强依赖 Hippo4j Server 项目. 自 Hippo4j 1.0.0 ...

  8. 借鉴美团文章实现的动态线程池,已开源

    大家好, 我是龙台 给自己定了个小目标,hippo4j 年底达到 1k star! GitHub:https://github.com/acmenlt/dynamic-threadpool Site: ...

  9. Kitty中的动态线程池支持Nacos,Apollo多配置中心了

    目录 回顾昨日 nacos集成 Spring Cloud Alibaba 方式 Nacos Spring Boot 方式 Apollo集成 自研配置中心对接 无配置中心对接 实现源码分析 兼容Apol ...

最新文章

  1. Spring配置文件中注入复杂类型属性
  2. Python中的排序sorted(d.items(), key=lambda x: x[1])
  3. Windows via C/C++ 学习(15)线程调度、线程优先级和亲缘性
  4. 简单排序——冒泡排序,选择排序,插入排序,对象排序
  5. linux 中的gzip命令
  6. 【C语言】单词个数统计(库函数第一次运用)
  7. FreeRTOS(2)---学习FreeRTOS前的准备工作
  8. axis2生成客户端代码_利用ApiPost一键、快速生成接口文档!女猿也过38节!
  9. GDI+入门——带你走进Windows图形的世界
  10. css中绝对定位与相对定位的区别
  11. 【预测模型】基于matlab RLS算法预测【含Matlab源码 222期】
  12. 抑郁症自测量表测试软件,抑郁自评量表
  13. Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to make it available
  14. 给定一个整数,请将该数各个位上数字反转得到一个新数。
  15. 【基于时间序列的变形观测的数据处理方法的研究】
  16. 计算机歌曲夜空中最亮的星,抖音夜空中最亮的星电视剧插曲歌曲介绍
  17. 正版Xshell免费使用
  18. 适用于监控大屏的websocket
  19. 在电脑上写好的移动端页面,如何在手机上快速查看
  20. PPT配色的实用小技巧分享

热门文章

  1. ValueError: Length mismatch: Expected axis has 4 elements, new values have 3 elements
  2. QT :-1: error: LNK1168: 无法打开 xxx.exe 进行写入
  3. ShadowPLCs A Novel Scheme for Remote Detection of Industrial Process Control Attacks
  4. 这篇文章会让你熟悉文件的各种操作,让你对文件的认识更加深入【c语言】
  5. 火狐浏览器各版本下载地址
  6. aws 噼里啪啦做了一天测试 花了4$
  7. 英飞凌TC264之PWM舵机控制
  8. Excel表格中如何快速生成下拉菜单
  9. C#中Internal关键字的总结
  10. arcgispro3.1(账号登陆)