项目亮点—动态线程池管理工具

问题

你是否在项目中使用线程池遇到过以下问题?

1.创建线程池核心参数不好评估,随着业务流量的波动,极有可能出现生产故障。

2.不支持优雅关闭,当项目关闭时,大量正在运行的线程池任务被丢弃。

3.不支持运行时监控,使用过程中业务无响应,不知道是不是线程池引起。

4.三方框架 RocketMQ、Dubbo 等线程池无法动态修改参数,修改后只能重启应用。

在真实业务场景中,线程池可能遇到的问题比这里描述的还要多,稀奇古怪。所以采用动态线程池—Hippo4j。

功能

通过对 JDK 线程池的增强,以及扩展三方框架底层线程池等功能,为业务系统提高线上运行保

障能力。

Hippo4j 框架提供以下功能支持:

1. 客户端应用运行时实时变更指定线程池核心参数,变更生效支持集群和单实例两种方式。

2. 线程池运行时异常报警,比如:线程池活跃度、阻塞队列容量水位较高,触发了拒绝策略以

及任务运行时间超长等。

3. 定时任务(默认 5 秒)采集线程池运行数据,可上报 Prometheus、InfluxDB 等数据库,

搭配 Grafana 做大屏展示。

4. 运行过程中支持实时查看线程池当前运行状态以及线程池内线程的堆栈信息。

5. 支持 Tomcat、Undertow 和 Jetty 容器线程池运行时查看和动态变更线程池配置。

6. 支持 Dubbo、Hystrix、Kafka、RabbitMQ、RocketMQ 等客户端线程池运行时数据查看

和动态变更线程池配置。

应用场景

1. 动态调参

Google 或者百度搜索线程池和生产事故关键字,几页都放不下,这也间接说明了线程池是个很

考验使用者技术功底的技术点。

那有没有一些技巧或者技术来尽量规避线程池使用上的问题?比如:线程池的配置应该如何选

择?

对于线程池参数的纠结点主要有两个,无外乎设置的线程数多了或者少了:

1. 如果预设的线程数或阻塞队列数量少了,当业务量上来,任务都在排队或者执行拒绝策

略。

2. 如果超量设置线程池的参数,无疑会造成资源浪费。

如果要修改运行中应用线程池参数,需要停止线上应用,调整成功后再发布,而这个过程异常的

繁琐,如果能在运行中动态调整线程池的参数无疑会提高问题解决效率。

Hippo4j 提供了应用线程池运行时变更核心参数的功能。而且,如果应用是集群部署,可以选择

修改线程池某一实例,或者修改集群全部实例,运行时生效,不需要再重启服务。

压测时可以使用 Hippo4j 动态调整线程池参数,判断线程池核心参数设置是否合理。对于开发

测试来说,如果不满足可以随时调整。

2. 告警策略

很多时候,线程池出故障的时候,系统已经发生了很严重的损失。有没有一种方式,在使用的线

程池即将出现问题,但还算比较可控时,触发相关报警提示给用户,进而规避该问题?

Hippo4j 基于上述问题思考,集成了四种报警策略:

1. 活跃度:假设阈值设置 80%,线程池最大线程数 10,当线程数达到 8 发起报警。

2. 阻塞队列容量:假设阈值设置 80%,阻塞队列容量 100,当容量达到 80 发起报警。

3. 触发拒绝策略:当线程池任务触发了拒绝策略时,发起拒绝策略报警。

4. 任务运行超时:假设用户设置单个任务正常执行是 1000ms,实际执行超过该时间发起报

警。

3. 线程池监控

Hippo4j 线程池提供了两种监控方式:线程池运行时数据采集监控以及客户端线程池运行实时状

态查看。

线程池运行时数据采集适合应用负责人巡查应用健康状态和排查问题时使用,实时状态适合排查

多实例之间的运行数据状态。

4. 框架底层线程池

上面讲的动态线程池是业务中开发人员手动创建的线程池,比如下面这个:

@Bean
@DynamicThreadPool
public ThreadPoolExecutor messageConsumeDynamicExecutor() {String threadPoolId = "message-consume";return ThreadPoolBuilder.builder().threadFactory(threadPoolId).threadPoolId(threadPoolId).dynamicPool().build();
}

而框架线程池指的是某些三方中间件底层使用到的线程池,比如 Dubbo、RocketMQ 等框架,这些底层框架为了增强性能选择使用线程池进行扩展。

为什么要适配这些中间件框架的线程池?相信这是很多小伙伴的疑问。以 Dubbo 举例,当服务高并发调用时,如果 Dubbo 底层线程池没有经过个性化配置,极有可能导致线程池打满,最终导致无法提供服务。

当遇到这种情况,可以使用 Hippo4j 对 Dubbo 线程池进行核心参数调整,避免生产故障时间持续。

再举个例子,当 RocketMQ 消息积压时,可能大部分公司的解决方案是添加客户端应用节点。而这种方式虽然可以解决问题,但是问题也很明显,太复杂且资源浪费。完全可以调整RocketMQ SDK 底层线程池的线程数来达到快速消费的逻辑,有效解决 MQ 消息堆积问题。

目前 Hippo4j 已支持的三方中间件线程池列表:

Apache Dubbo

Alibaba Dubbo

Apache Kafka

Apache RocketMQ

RabbitMQ

SpringCloud Stream RocketMQ

SpringCloud Hystrix

Tomcat

Jetty

Undertow

上述中间件线程池都可以在 Hippo4j 页面上操作核心参数动态变更以及监控功能,如下所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/781548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux安装wine

#教程 一直以来,我运行双系统,有两个软件必须在window下运行,一个是wind金融终端,一个是通达信金融终端,现已解决这两个软件在linux(debian系)环境下运行问题,记录如下:…

WebGIS开发

1.准备工作 高德开发API注册账号&#xff0c;创建项目拿到key和密钥 高德key 2.通过JS API引入高德API <html><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><metaname&quo…

【3D-GS】Gaussian Splatting SLAM——基于3D Gaussian Splatting的全网最详细的解析

【3D-GS】Gaussian Splatting SLAM——基于3D Gaussian Splatting的定SLAM 3D-GS 与 Nerf 和 Gaussian Splatting1. 开山之作 Nerf2. 扛鼎之作 3D Gaussian Splatting2.1 什么是3D高斯?高斯由1D推广到3D的数学推导2.2 什么是光栅化?2.3 什么是Splatting?2.4 什么是交叉优化?…

AWS EC2 学习之: 使用 PuTTY 从 Windows 连接到 Linux 实例

启动您的实例之后&#xff0c;您可以连接到该实例&#xff0c;然后像使用您面前的计算机一样来使用它。 注意 启动实例后&#xff0c;需要几分钟准备好实例&#xff0c;以便您能连接到实例。检查您的实例是否通过了状态检查。您可以在 Instances 页上的 Status Checks 列中查…

什么是防火墙,部署防火墙有什么好处?

与我们的房屋没有围墙或界限墙一样&#xff0c;没有防护措施的计算机和网络将容易受到黑客的入侵&#xff0c;这将使我们的网络处于巨大的风险之中。因此&#xff0c;就像围墙保护我们的房屋一样&#xff0c;虚拟墙也可以保护和安全我们的设备&#xff0c;使入侵者无法轻易进入…

如何处理网络编程中的并发连接?

如何处理网络编程中的并发连接&#xff1f; 在网络编程中&#xff0c;处理并发连接是一个至关重要的问题。随着网络应用的普及和用户量的增长&#xff0c;服务器需要同时处理来自多个客户端的请求&#xff0c;因此必须有效地管理并发连接。下面将详细讨论如何处理网络编程中的…

SAP Fiori开发中的JavaScript基础知识9 - 代码注释,严格模式,JSON

1 背景 本文将介绍JavaScript编程中的三个小知识点&#xff1a;也即代码注释&#xff0c;严格模式&#xff0c;JSON文件。 2 代码注释 JavaScript的代码注释方式如下&#xff1a; // Single line comment/* Multi line comment */3 严格模式 JavaScript的"strict mod…

JavaScript笔记 07

目录 01 基本数据类型和引用数据类型之间的区别 02内置对象之Array 01 基本数据类型和引用数据类型之间的区别 js的数据内存结构是参照java诞生的 内存分为栈内存和堆内存 栈内存: 空间很小 存储基本数据类型 堆内存: 空间很大 引用数据类型声明在栈内存 内容在堆内存 使用地…

0101支付安全-支付模块-项目实战

文章目录 一、信息安全的基础-机密性1 相关概念2 对称加密和非对称加密 二、身份认证三 摘要算法四、数字签名五、数字证书结语 在支付过程中&#xff0c;设计多方的敏感信息&#xff0c;那么安全尤为重要。下面先简单介绍下&#xff0c;相关概念。 一、信息安全的基础-机密性 …

解决GNU Radio+USRP实现OFDM收发在接收端QPSK星座图映射无“抖动”问题

文章目录 前言一、遇到的问题二、解决方案三、重新编译安装四、验证五、资源自取 前言 本文记录在 GNU RadioUSRP 实现 OFDM 收发时&#xff0c;在接收端 QPSK 星座图映射无“抖动”问题的解决方法&#xff0c; 一、遇到的问题 我遇到的问题是&#xff0c;现在搭建的 OFDM 模…

E5063A是德科技E5063A网络分析仪

181/2461/8938产品概述&#xff1a; Keysight E5063A 是一款低成本网络分析仪&#xff0c;可为测试天线、电缆、滤波器和 PCB 等简单无源元件提供优化的性能和功能。Keysight E5063A 为您的企业提供价格和性能之间的最佳平衡&#xff0c;以满足您的业务和技术要求。它利用行业…

vue 通过插槽来分配内容

通过插槽来分配内容 一些情况下我们会希望能和 HTML 元素一样向组件中传递内容&#xff1a; <AlertBox>Something bad happened. </AlertBox> 这可以通过 Vue 的自定义 <slot> 元素来实现&#xff1a; <template><div class"alert-box&quo…

安装和使用 Oracle Database 23c 容器鏡像

Oracle Database 23c 是 Oracle 最新的数据库版本&#xff0c;它带来了许多新特性和性能改进。 对于开发者来说&#xff0c;Oracle 提供了一个免费的开发者版&#xff0c; 可以通过 Docker 容器轻松安装和使用。以下是详细的安装和使用指南。 安装 Docker 在开始之前&#xff0…

Linux解压安装Kafka

Linux解压安装Kafka MacBook Linux安装zookeeper MacBook Linux安装Kafka Kafka依赖Zookeeper Kafka依赖Zookeeper,可以单独安装Zookeeper,也可以直接启动Kafka包里自带的Zookeeper Kafka 安装 cd /data/software#下载 wget http://mirror.bit.edu.cn/apache/kafka/2.0.1…

2024 年多链代币开发对您的业务有何好处

2024 年&#xff0c;多链代币开发将成为寻求增强数字化影响力并释放区块链领域新机遇的企业的关键战略。通过利用多个区块链&#xff0c;公司可以显着提高其代币的可扩展性、互操作性和安全性。这种方法不仅提高了交易速度并降低了费用&#xff0c;还使企业能够利用更广泛的用户…

深度学习入门简单实现一个神经网络

实现一个三层神经网络 引言测试数据 代码 引言 今天我们实现一个简单的神经网络 俩个输入神经元 隐藏层两个神经元 一个输出神经元 激活函数我们使用sigmoid 优化方法使用梯度下降 我们前期准备是需要把这些神经元的关系理清楚 x1&#xff1a;第一个输入 x2&#xff1a;第二个…

C#手术麻醉系统源码 大型医院手麻系统4大需求是什么?

C#手术麻醉系统源码 大型医院手麻系统4大需求是什么&#xff1f; 手术麻醉临床信息系统有着完善的临床业务功能&#xff0c;能够涵盖整个围术期的工作&#xff0c;能够采集、汇总、存储、处理、展 现所有的临床诊疗资料。通过该系统的实施&#xff0c;能够规范手麻科的工作流程…

Manticore Search 中文分词搜索入门

Manticore Search 3.1.0 版引入了一种基于ICU 文本分割算法的中文文本分割新方法,该算法遵循第二种方法 - 基于字典的分割。 ICU 是一组开源库&#xff0c;为软件应用程序提供 Unicode 和全球化支持。与许多其他功能一起&#xff0c;它解决了文本边界确定的任务。 ICU 算法在文…

Matlab-写入mhd和raw医学图像处理格式文件

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 mhd和raw是什么&#xff1f; MHD&#xff08;MetaImage&#xff09;和RAW&#xff08;Raw Image Data&#xff09;是用于医学图像…

算法---二分算法

一:二分法算法分析 1、二分查找算法定义 二分查找又称折半查找,它是一种效率较高的查找方法。 二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。 2、基本思想 (1)首先确定该区间的中点位置 (2)将待查的K值与R[mid]比较:若相等…