一种Java线程池动态扩容缩容方法技术

技术编号:33533060 阅读:33 留言:0更新日期:2022-05-19 02:07
本发明专利技术公开了一种Java线程池动态扩容缩容方法,包括以下步骤:A、采集线程池度量数据;B、分析线程池度量数据;C、线程池自动扩缩容,本发明专利技术旨在基于线程池的度量来实现线程池参数的动态扩容和缩容机制,基于用户设置的阀值不需要人工介入调整线程池,降低人工维护成本和出错机率,能够及时调整线程池,获得更高的吞吐量。吞吐量。吞吐量。

【技术实现步骤摘要】
一种Java线程池动态扩容缩容方法


[0001]本专利技术涉及Java
,具体为一种Java线程池动态扩容缩容方法。

技术介绍

[0002]多线程是我们常用的并发编程工具,也是性能优化在多核处理器时代常用的手段。线程池可以减少系统在创建和销毁线程上所花的时间,充分利用服务器的多核资源,为用户带来更快的响应时间和更高的任务吞吐量。
[0003]Java语言就提供了原生线程池的实现,使得用户在编程方面创建一个多线程任务执行线程池的任务简单不少,但线程池的设置是否合理与任务类型、系统CPU资源息息相关。一但参数设置不合理要么忙死,要么闲死。Java提供的原生线程池的工作机制如图2所示。
[0004]Java线程池在内部实际上构建了一个任务生产者和消费者模型,将线程和任务两者解耦,并不直接关联,从而使得任务可排队缓冲执行,复用线程。线程池的运行主要分成两部分:任务调度、线程分配。任务调度部分是生产者角色,当任务提交以后,线程池会判断该任务后续的流转:
[0005](1)直接申请线程执行该任务;
[0006](2)缓冲到阻塞队列中等待执行;
[0007](3)拒绝执行。
[0008]线程分配部分是消费者角色,它们被统一维护在线程池内,根据任务请求进行线程的分配,当线程执行完任务后则会继续获取新的任务去执行,最终当线程获取不到任务的时候,空闲一段时间,线程就会被回收。
[0009]虽然Java语言提供的原生线程池实现,使得我们创建和使用线程池的代价大大降低。但是在实践中我们并不知道如何创建一个高效的Java原生线程池,怎样才能设置合理的线程池参数,进行有的放矢地优化。通常CPU密集型的任务占用CPU时间较长,线程数可以设置小一点,I/O密集型的任务占用CPU时间较短,线程数可以设置大一点。这些都是为了充分利用到我们的CPU资源。在业界针对线程池的如何得到一个合理的线程数设置,有一个经验公式即:线程数=CPU核数*期望CPU使用率*(1+等待时间/处理时间)。但是我们认为一个线程池的实现应该更加智能,能够基于度量,来实时动态改变线程池的线程数,以最大化的合理使用CPU资源,减少任务被拒绝执行的数量,减少线程池人工维护成本。目前Java语言提供的原生线程池实现以及一些厂商提供的动态可配置的线程池实现存在如下缺点:
[0010](1)Java提供的原生线程池实现参数一旦设置便不能改变,动态线程池的能力需要用户自己扩展,且没有给出线程池度量指标模型。
[0011]一些扩展Java线程池实现的动态线程池同样缺少合理的度量模型,线程池的扩容和缩容需要手动调整,增加了线程池的人工维护成本和出错机率。

技术实现思路

[0012]本专利技术的目的在于提供一种Java线程池动态扩容缩容方法,以解决上述
技术介绍
中提出的问题。
[0013]为实现上述目的,本专利技术提供如下技术方案:一种Java线程池动态扩容缩容方法,包括以下步骤:
[0014]A、采集线程池度量数据;
[0015]B、分析线程池度量数据;
[0016]C、线程池自动扩缩容。
[0017]优选的,所述步骤A具体如下:对线程池的度量指标进行实时观测,并定时采样记录,通过对Java线程池进行扩展和埋点,得到了关键指标的度量数据。
[0018]优选的,所述步骤B具体如下:通过利用一些时间序列数据库将这些指标数据保存起来,再利用分析工具对它们进行分析。
[0019]优选的,所述步骤C具体如下:用户通过设置度量指标调优阀值来自动进行线程池的线程数调大或调小。
[0020]优选的,所述步骤C中还可以根据任务处理/请求速率、任务忙闲比等更加合理的度量指标阀值来进行动态线程池的调大或调小。
[0021]与现有技术相比,本专利技术的有益效果是:本专利技术旨在基于线程池的度量来实现线程池参数的动态扩容和缩容机制,基于用户设置的阀值不需要人工介入调整线程池,降低人工维护成本和出错机率,能够及时调整线程池,获得更高的吞吐量。
附图说明
[0022]图1为本专利技术工作原理框图;
[0023]图2为现有技术工作原理框图。
具体实施方式
[0024]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0025]在本专利技术的描述中,需要说明的是,术语“上”、“下”、“内”、“外”“前端”、“后端”、“两端”、“一端”、“另一端”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本专利技术和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本专利技术的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
[0026]在本专利技术的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“设置有”、“连接”等,应做广义理解,例如“连接”,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本专利技术中的具体含义。
[0027]请参阅图1,本专利技术提供一种技术方案:一种Java线程池动态扩容缩容方法,包括以下步骤:
[0028]A、采集线程池度量数据;
[0029]B、分析线程池度量数据;
[0030]C、线程池自动扩缩容。
[0031]本专利技术中,步骤A具体如下:对线程池的度量指标进行实时观测,并定时采样记录,通过对Java线程池进行扩展和埋点,得到了关键指标的度量数据。
[0032]本专利技术中,步骤B具体如下:通过利用一些时间序列数据库将这些指标数据保存起来,再利用分析工具对它们进行分析。
[0033]本专利技术中,步骤C具体如下:用户通过设置度量指标调优阀值来自动进行线程池的线程数调大或调小,如:度量系统在监测到一分钟内任务阻塞队列的实时长度增长到最大长度的80%则进行扩缩。
[0034]本专利技术中,步骤C中还可以根据任务处理/请求速率、任务忙闲比等更加合理的度量指标阀值来进行动态线程池的调大或调小。
[0035]部分厂商实现只是给出了一个如何扩展Java原生线程池实现可配置的动态线程池原理,未明确给出线程池度量指标模型。本专利明确提出了一套基于度量指标模型作为动态线程池扩容和缩容的数据模型。
[0036]现有动态线程池的参数配置需要人工干预生效,干预过程复杂,增大了人工重新配置出错的机效和及时响应性。本专利明确提出了一套基于度量指标阀值进行Java线程池自动扩容和缩容的控制模型,不需要人工干预。
[0037]综上所述,本专利技术本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种Java线程池动态扩容缩容方法,其特征在于:包括以下步骤:A、采集线程池度量数据;B、分析线程池度量数据;C、线程池自动扩缩容。2.根据权利要求1所述的一种Java线程池动态扩容缩容方法,其特征在于:所述步骤A具体如下:对线程池的度量指标进行实时观测,并定时采样记录,通过对Java线程池进行扩展和埋点,得到了关键指标的度量数据。3.根据权利要求1所述的一种Java线程池动态扩容缩容方法,其特征在于:所述步骤B具体如下...

【专利技术属性】
技术研发人员:李强宋牮陈宪斌彭滨
申请(专利权)人:北京致远互联软件股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1