当前位置: 首页 > news >正文

开源利器推荐:美团动态线程池框架的接入分享及效果展示

前言

蛮早前有些过关于线程池的使用及参数的一些参考配置,有兴趣的可以翻看以前的博文,但终究无法解决线程池的动态监控和实时修改。

以前读过美团早期发布的动态线程池框架的思路相关文章,但想要独自实现不是一件容易的事。

去年,一款美团动态线程池的框架DynamicTp终于开源了,因此我有尝试使用一下,发现接入简单,侵入性也不强,支持的接入方式也多,总体还是很不错的。

我认为尤其适合中小企业SpringBoot应用接入,是一款线程池监控的利器。

介绍

DynamicTp官网:https://dynamictp.cn/

image

架构图

image

下面,我把一个非配置中心的接入案例分享给大家,配置中心接入方式大同小异。

正文

使用的是最新版本1.1.3

1、引入依赖

image

2、yml配置

核心配置就是图中红色说明的报警配置和线程池参数配置

image

这是紧接着上面的邮件告警配置,除了邮件方式还有其他很多方式,具体可参考官网,个人项目更推荐邮件方式,接入最简单。

image

3、测试

定义一个接口,使用Hutool提供的并发模拟工具类,这里先设置线程数200。

image

在service中注入一个线程池,默认名称regExecutor,和yml配置中定义的刚好对应上。

image

这个接口的逻辑很简单,就是模拟并发场景下使用线程池的效果。

image

4、效果

执行接口看下效果,发现一切正常,没有任何告警。

这是因为我们yml中配置的线程池参数可以承受测试时设置的200个线程数。

image

那么,我们把测试接口的线程数设置成500再看看。

image

执行后,可以看到,DynamicTp已经触发了告警,并且提示邮件发送成功。

image

我用的QQ邮箱,发现通知也收到了。

image

点开后,可以看到DynamicTp提供的详细的线程池监控告警通知。

image

可以看到,报警类型是reject,表示线程被拒绝,并且展示出了线程池参数的配置,以及拒绝策略,和拒绝的任务数量。

其中,拒绝任务数量达到了250个,计算一下我们配置的参数,核心8,最大50,队列容量200。

并发场景下,该配置实际最大容量确实是250,而我们测试传入的线程数是500,被拒绝250,刚好符合。

这样,我们根据被拒绝的任务数量,就可以动态调整参数,比如扩大队列容量,或者提高核心线程数的上限等等,甚至是调整拒绝策略为调用者线程继续执行。

这都要根据具体业务场景来区分,到底是IO密集型还是CPU密集型,关于这个可以参考我其他的博文。

总结

总之,DynamicTp的接入是很简单的,而且社区在不断完善,目前Gitee上能找到的关注度稍高的动态线程池框架其实就两个,只要学会使用一个就够用了,思想没有太多区别。

这个案例我并没有展示动态修改参数的效果,因为这种场景一般是分布式环境下接入比较适合,比如接入了nacos配置中心,那么DynamicTp也提供了对接方案。

想要文中的完整案例代码来测试效果的,可以关注红枫叶下载哈。


喜欢的xdm,可以【点个赞】,【收藏一下】以备不时之需,更可以【关注下我】,本人持续输出干货,分享工作中的一些实践经验。

http://www.lryc.cn/news/142920.html

相关文章:

  • Linux目录结构与文件管理 (02)(四)
  • 对1GHz脉冲多普勒雷达进行快速和慢速处理生成5个移动目标的距离多普勒图研究(Matlab代码实现)
  • uni.uploadFile上传 PHP接收不到
  • 2023年高教社杯 国赛数学建模思路 - 复盘:光照强度计算的优化模型
  • Netty简易聊天室
  • Flutter Cannot run with sound null safety, because the following dependencies
  • 利用改进的遗传算法(种群隔离与个体迁移)mpi并行解决tsp问题
  • 【C++】—— C++11之线程库
  • 前端面试:【性能优化】前端缓存、CDN、懒加载和预加载
  • 民族传统文化分享系统uniapp 微信小程序
  • netty(二):NIO——处理可写事件
  • PHP基本语法解析与应用指南
  • ICS PA1
  • Java学数据结构(4)——散列表Hash table 散列函数 哈希冲突
  • OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 论文阅读
  • 【安全】原型链污染 - Hackit2018
  • net.ipv4.ip_forward=0导致docker容器无法与外部通信
  • 软考高级系统架构设计师系列论文九十八:论软件开发平台的选择与应用
  • Springboot整合WebFlux
  • uniapp 实现地图距离计算
  • 破除“中台化”误区,两大新原则考核中后台
  • 基于YOLOV8模型和Kitti数据集的人工智能驾驶目标检测系统(PyTorch+Pyside6+YOLOv8模型)
  • 基于Android的课程教学互动系统 微信小程序uniapp
  • OpenCV基础知识(9)— 视频处理(读取并显示摄像头视频、播放视频文件、保存视频文件等)
  • PostgreSQL命令行工具psql常用命令
  • 【CSS 画个梯形】
  • Spring Data Redis
  • 软件测试的方法有哪些?
  • Python Qt学习(二)Qt Designer
  • 我的数据上传类操作(以webDAV为例)