深度剖析动态线程池的九大场景-线程池的使用场景
深度剖析动态线程池的九大场景
作者:小马哥 2022-09-29 09:35:56系统 hippo4j 通过对 JDK ThreadPoolExecutor 线程池增强,以及扩展三方框架底层线程池等功能,为业务系统提高线上运行保障能力。线程池是一种基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发以及大批量的任务处理场景,线程池的使用是必不可少的。
如果有在项目中实际使用线程池,相信你可能会遇到以下痛点:
线程池随便定义,线程资源过多,造成服务器高负载。线程池参数不易评估,随着业务的并发提升,业务面临出现故障的风险。线程池任务执行时间超过平均执行周期,开发人员无法感知。线程池任务堆积,触发拒绝策略,影响既有业务正常运行。当业务出现超时、熔断等问题时,因为没有监控,无法确定是不是线程池引起。原生线程池不支持运行时变量的传递,比如 MDC 上下文遇到线程池就 GG。当项目关闭时,无法做到优雅退出,大量正在运行的线程池任务被丢弃。线程池运行中,任务执行停止,怀疑发生死锁或执行耗时操作,但是无从下手。基于以上诸多痛点,小马哥着手 hippo4j 的开发,致力于打造标准线程池动态变更和监控的中间件框架。
GitHub:https://github.com/opengoofy/hippo4j
Gitee:https://gitee.com/agentart/hippo4j
hippo4j 通过对 JDK ThreadPoolExecutor 线程池增强,以及扩展三方框架底层线程池等功能,为业务系统提高线上运行保障能力。
小贴士:hippo4j 不止于 Java ThreadPoolExecutor 的增强,Dubbo、RabbitMQ、RocketMQ、Hystrix、Tomcat、Jetty、Undertow等框架线程池也都有进行监控和动态变更。
1. 线程池随意定义,造成服务器高负载
在系统开发的过程中,因为涉及到多人协作,难免会出现信息不互通的情况。在同一个系统,对于线程池来说,常见的是线程池随意定义。
开发者张三要记录用户操作日志,定义了user-log-record-thread-pool;开发者李四要记录会员操作日志,定义了member-log-record-thread-pool;开发者王五要记录权限操作日志,定义了power-log-record-thread-pool;……随着系统不断开发,相同或不同语义的线程池被定义得越来越多,间接导致服务器资源严重耗损。
而如果系统中使用 hippo4j,能够在控制台查看当前应用已有线程池,是否存在相同语义且业务可复用线程池实例,避免线程资源过度浪费。
2. 线程池参数不易评估
业务中使用了线程池,十个程序员可能有九个都在犯嘀咕,这线程池的配置应该如何选择?
我觉得犯纠结的点主要有两个,无外乎设置的数多了或者少了。
如果预设的线程数或阻塞队列数量少了,当业务量上来,会遇到两种情况,不管哪一种对业务来说都是不能接受的。预估 200ms 执行完的任务,可能会 2s 执行完,因为任务都在排队。任务满了后,开始执行拒绝策略,影响正常业务。如果超量设置线程池的参数,无疑会造成资源浪费,同样会造成两种情况。线程资源也是占用服务器资源的,开启的多了对服务器有一定压力。如果过多得创建线程,当和其它线程池一起执行时,服务器 CPU 上下文切换也是个问题。大家都知道,如果要修改运行中应用线程池参数,需要停止线上应用,调整成功后再发布,而这个过程异常的繁琐,如果能在运行中动态调整线程池的参数多好。
美团技术团队基于这些痛点,推出了动态线程池的概念,催生了一批动态线程池框架,hippo4j 也是其一。
如果应用是集群部署,hippo4j 可以选择修改线程池某一实例,或者修改集群全部实例,运行时生效,不需要再重启服务。
再比如,压测时使用 hippo4j 动态调整线程池参数,对于开发测试来说,也是个不错的选择。
3. 线程池运行时报警策略
从线程池运行时监控的角度出发,hippo4j 内置 4 种报警策略,线程池活跃度、阻塞队列容量、拒绝策略触发以及任务运行超时报警。
线程池活跃度:假设阈值设置 80%,线程池最大线程数 10,当线程数达到 8 发起报警。阻塞队列容量:假设阈值设置 80%,阻塞队列容量 100,当容量达到 80 发起报警。触发拒绝策略:当线程池任务触发了拒绝策略时,发起拒绝策略报警。任务运行超时:假设单个任务超时为 1000ms,任务执行超过该时间发起报警。hippo4j 支持钉钉、企业微信和飞书软件通知,线程池任务运行超时报警示例:
4. 线程池运行时状态对开发者黑盒
线程池在服务运行过程中,对开发者来说是一个完全的黑盒。开发者无法得知线程池的参数变化,比如阻塞队列数量或者完成任务数等核心参数,这对于排查问题来说并不友好。
hippo4j 支持线程池运行时状态实时查看,并在核心参数的基础上扩展了负载、内存以及拒绝次数等关键指标,每次查询返回线程池当前运行信息。
5. 线程池监控
hippo4j 提供了两种线程池运行时数据监控方式,分别是:
(1)内置数据池数据采集 + 监控,无需依赖任何中间件,由 hippo4j 内部集成的方式运行。
(2)使用三方中间件 Prometheus + Grafana 或 ElasticSearch + Grafana 采集和监控。
6. 整合 Spring ThreadPoolTaskExecutor
SpringThreadPoolTaskExecutor对原生线程池扩展了一部分功能,我认为比较实用有两个,并且 hippo4j 也已经支持。
当服务停止时,通知线程池处理剩余任务,并在等待指定时间后强制停止。传递线程上下文到线程池执行上下文中。第一个是实际使用中很核心的功能,减少了线程池丢弃任务的可能,这里重点说明下。
我们平时在停止应用时,有没有这样一个考虑,线程池中的任务真的都执行完成了吗?
可能执行完了,可能没有。
Spring 基于以上考虑,注册了线程池销毁方法。在应用关闭时,如果发现线程池存在任务没有执行完,需要等待一个指定时间。指定时间内任务执行如果执行完毕,皆大欢喜;如果还存在没有结束的任务,则丢弃。
为什么会丢弃任务而不是再等等?
因为如果线程池任务长时间执行,会影响整个应用的停止,进行了折中处理。
7. 三方框架中间件线程池适配
hippo4j 的目标是兼容所有框架的线程池,并可以提供监控和动态修改的能力。
目前已支持的三方框架线程池列表:
Apache DubboAlibaba DubboRabbitMQApache RocketMQSpringCloud Stream RocketMQSpringCloud HystrixTomcatJettyUndertow支持上述框架线程池的动态变更参数和监控功能,比如:
未来 hippo4j 会支持更多三方框架线程池,如果你有好的想法也可以和我沟通。
8. 线程池运行堆栈查看
线程池运行中,任务运行停止,怀疑发生死锁或执行耗时操作。大多数程序员会选择使用命令或者 arthas 查看线程池运行中线程的堆栈,看看其中的 Worker 都在哪个方法卡住了。
hippo4j 基于以上痛点,推出了线程池运行堆栈实时查看功能。
9. 动态线程池对性能有无影响
这可能是很多开发者担心的一个点,在这里统一回复下。
hippo4j 仅对线程池做部分核心功能增强,没有修改任务执行源代码流程,可以保证绝对的安全。
其次,hippo4j 上述的功能,都是与线程池执行任务主流程外扩展的,不会影响线程池正常的执行性能。
hippo4j 为用户提供了两种运行模式,分别是轻量级的配置中心接入,和功能更齐全的服务端接入,下面都来说说各自的优缺点。
1. hippo4j config
依赖配置中心完成线程池的动态变更,已支持的配置中心有:Nacos、Apollo、Zookeeper、Etcd,未来还会接入 Consul 等。
另外,hippo4j 已支持用户自定义配置中心实现,如果使用公司自研或其它配置中心,也可以极小工作量进行引入。
使用 hippo4j config 模式的优点和不足:
优点:轻量级引入,可以根据项目中已有配置中心进行 hippo4j 的集成,无需引入其它服务,即可使用线程池参数动态化、运行时监控、报警等核心功能。不足:缺少可视化控制台页面,上文中描述的诸多功能不能使用。2. hippo4j server
需要部署 hippo4j Jar 包,涵盖上文中描述的所有功能。
因为服务端内部实现了配置中心和注册中心(参考 nacos 和 eureka 实现),所以它不依赖任何三方中间件。
优点:功能齐备,可以享受更多的服务和便利。如果应用启动的是集群,可以指定其中某一个实例的线程池修改,而 config 则是整个集群变更。不足:相比较 hippo4j config,需要额外部署一个 jar 包,增加了部署工作量。如果最初使用 hippo4j config,想要切换到 server,两者在进行替换的时候,无需修改业务代码。
使用建议:根据公司情况选择,如果基本功能可以满足使用,选择 hippo4j config 使用即可;如果希望更多的功能,可以选择 hippo4j server。
开源项目发展离不开用户和贡献者的支持,小马哥梳理出最近 hippo4j 发展近况:
GitHub、Gitee 收获3.3k+ star,830+ fork。荣获 Gitee 评选为GVP(最有价值开源项目)。70名项目贡献者 为 hippo4j 添砖加瓦,在这里重点感谢。18家使用登记公司,生产环境正式运行 hippo4j。通过墨菲安全扫描,无任何代码安全漏洞隐患。最后总结下,作者在每天下班和周六日的时间做开源项目,妥妥的为爱发电。如果各位大佬觉得有用,麻烦在以下平台 star 支持,非常感谢~
GitHub:https://github.com/opengoofy/hippo4j
Gitee:https://gitee.com/agentart/hippo4j
责任编辑:张燕妮 来源:龙台的技术笔记 线程池推荐系统
微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载
语言:中文版系统大小:5.13GB系统类型:Win11微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化 1、保留 Edge浏览器。 2、隐藏“操作中心”托盘图标。 3、保留常用组件(微软商店,计算器,图片查看器等)。 5、关闭天气资讯。
Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载
语言:中文版系统大小:4.75GB系统类型:Win11Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件
windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载
语言:中文版系统大小:5.31GB系统类型:Win11windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化
微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载
语言:中文版系统大小:5.31GB系统类型:Win11微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载
微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件
语言:中文版系统大小:0MB系统类型:Win11微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为
雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载
语言:中文版系统大小:4.75GB系统类型:雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统
雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO
语言:中文版系统大小:5.91GB系统类型:Win7雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户
番茄花园Ghost Win7 x64 SP1稳定装机版2022年7月(64位) 高速下载
语言:中文版系统大小:3.91GB系统类型:Win7欢迎使用 番茄花园 Ghost Win7 x64 SP1 2022.07 极速装机版 专业装机版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,集成最全面的硬件驱动,精心挑选的系统维护工具,加上独有人性化的设计。是电脑城、个人、公司快速装机之首选!拥有此系统
相关文章
- win7设置系统简介制作详细说明
- 本文教您BIOS与UEFI切换办法
- gpedit.msc找不到,本文教您win10找不到gpedit.msc怎样办
- 怎么改显示器刷新率win7
- 变声宝宝怎么用?变声宝宝使用教程
- DOS命令中的ECHO命令详细说明
- 输入法怎样切换不出来,本文教您搜狗输入法切换不出来了怎样办
- 本文教您系统管理员设置了系统策略防范进行此安装怎样处理
- xp系统:电脑不显示桌面怎样办
- Word大于等于号怎么打?如何输入大于等于符号?
- 网易公开课怎么分享视频 网易公开课分享视频方法
- Windows8更新出现8024402F出错的处理办法
- Win10专业版麦克风不工作怎么办?
- 怎样设置电脑开机密码,本文教您win10怎样设置开机密码
- 深度教你用大笨象U盘安装系统(图文详细教程)
- 如何处理WindowsXP拨号连接出错并提示651代码问题
- 深度win7安装图文详细教程图解
- Win8无法访问局域网共享文件夹的处理办法
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 4雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1大地系统Ghost Win10 旗舰版64位 v2023.01最新免费下载
- 2深度技术 GHOST WIN7 SP1 X86 欢度国庆版 V2017.10(32位) 下载
- 3微星笔记本win11 64位免费正式版镜像 v2023下载
- 4番茄花园Ghost Win8.1 (X32) 新春特别 纯净版2022年2月(免激活) ISO镜像免费下载
- 5Win10 21H2 ISO官方镜像最新版下载_win1021h2官方正式版镜像下载
- 6windows7超级精简版32位下载 v2023.01
- 7游戏Win7专用系统下载_游戏专用Ghost Win7 64位极速旗舰版下载
- 8番茄花园 GHOST XP SP3 正式通用版 V2023.05 下载
- 9雨林木风 GHOST WIN7 SP1 X86 正式优化版 V2018.10(32位) 下载
- 10win10系统2004纯净版下载-win10系统 2004 纯净版64位 v2023.07最新免费下载