CN109308397B - 梯度压力测试方法、装置及电子设备 - Google Patents
梯度压力测试方法、装置及电子设备 Download PDFInfo
- Publication number
- CN109308397B CN109308397B CN201811194954.5A CN201811194954A CN109308397B CN 109308397 B CN109308397 B CN 109308397B CN 201811194954 A CN201811194954 A CN 201811194954A CN 109308397 B CN109308397 B CN 109308397B
- Authority
- CN
- China
- Prior art keywords
- pressure
- pressing
- task
- pressure applying
- machine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
Abstract
本发明涉及一种梯度压力测试方法、装置及电子设备。该梯度压力测试方法、装置及电子设备将施压机资源转换位算力,将施压任务的初始线程数转换为算力,确定施压任务的初始线程数对应的施压机数量,并且当前线程数在根据施压任务的总线程数、初始线程数、步进周期和步进线程数步进时,基于当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,即采用梯度加压方式自动调整所需的施压机个数和/或每台施压机上的线程数,避免了用户手动调整施压机个数带来的费时费力,也避免了浪费施压机资源的问题;及通过第一设定CPU使用率进行限制避免施压机处于过载状态,避免出现压测数据不准的问题。
Description
技术领域
本发明涉及性能测试、压力测试技术领域,具体而言,涉及一种梯度压力测试方法、装置及电子设备。
背景技术
传统性能测试平台如NGrinder、Jmeter都是一console多施压机模式,单一任务压测根据设置的梯度加压模式将线程数平摊到每台施压机上,每台施压机做梯度线程压力测试,此压测模型是典型的开环压测模式。存在以下问题:a.施压机资源大于任务所需施压机数,则不能充分利用施压机资源。b.施压机资源小于任务所需施压机数,则施压机处于过载状态,导致施压机压测统计数据如接口响应时间RT会偏大不准确,压测数据没有参考意义。
现有技术中,为了保证压测数据的准确性,一般使施压机资源大于任务所需施压机数,则造成施压机资源浪费。
发明内容
有鉴于此,本发明的目的在于提供一种不浪费施压机资源且提供准确压测数据的梯度压力测试方法、装置及电子设备,以解决上述问题。
为实现上述目的,本发明提供如下技术方案:
本发明较佳实施例提供一种梯度压力测试方法,包括:
采用公式S=(Z×H)/(z×h)×m计算单台施压机算力,其中,S表示单台施压机算力,Z表示单台施压机的CPU的主频,H表示单台施压机的CPU的核数,z表示单台标准算力机的CPU的主频,h表示单台标准算力机的CPU的核数,m表示标准算力机的算力系数;
计算施压任务的初始线程数对应的算力;
根据所述单台施压机算力和所述施压任务的初始线程数对应的算力,计算所述施压任务的初始线程数对应的施压机数量,得到施压机的初始数量;
在进行梯度压力测试的过程中,采用初始数量的施压机开始执行所述施压任务,其中,所述初始数量的施压机在执行所述施压任务时提供的总线程数和所述施压任务的初始线程数相等;
所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数,其中,所述施压任务信息包括总线程数、初始线程数、步进周期和步进线程数。
进一步地,所述计算施压任务的初始线程数对应的算力的步骤包括:
获取所述施压任务的响应时间;
根据所述施压任务的响应时间获取单台所述标准算力机执行所述施压任务时的最优线程数量;
根据所述施压任务的初始线程数及单台所述标准算力机执行所述施压任务时的最优线程数量,计算所述施压任务的初始线程数对应的算力。
进一步地,所述根据所述单台施压机算力和所述施压任务的初始线程数对应的算力,计算所述施压任务的初始线程数对应的施压机数量,得到施压机的初始数量的步骤包括:
将所述施压任务的初始线程数对应的算力除以所述单台施压机的算力得到商;
将所述商向上取整得到整数,使所述施压任务的初始线程数对应的施压机数量等于所述整数。
进一步地,所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数的步骤包括:
所述施压任务的当前线程数根据所述施压任务的初始线程数、步进周期和步进线程数进行步进,console端在预设周期遍历所有当前施压的施压机的实际CPU使用率;
若当前施压的施压机的实际CPU使用率小于所述第一设定CPU使用率,则继续使用所述当前施压的施压机进行施压,若当前施压的施压机的实际CPU使用率大于或等于所述第一设定CPU使用率,则新增施压机进行施压,直到所有施压机提供的总线程数等于所述施压任务的总线程数;
并且,在步进过程中,若当前施压的施压机存在实际CPU使用率大于所述第一设定CPU使用率的,则减少实际CPU使用率大于所述第一设定CPU使用率的施压机的线程数。
进一步地,所述梯度压力测试方法还包括:
获取所述施压任务关联的所有施压的施压机列表,所述施压机列表包括所述施压任务关联的所有施压的施压机IP、每个施压的施压机包括的进程ID和每个进程包括的线程数;
根据所述施压机列表,在所述施压任务关联的施压机异常时,将异常的施压机从所述施压任务压力分布中过滤,并将与所述异常的施压机提供的线程数相等的线程补充至所述施压任务中。
进一步地,当所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,直到所有空闲的施压机均用于施压且所述所有施压的施压机提供的总线程数小于所述施压任务的总线程数时,所述方法还包括:
所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第二设定CPU使用率,动态调整当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数;
其中,所述施压机的第二设定CPU使用率大于第一设定CPU使用率。
进一步地,所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第二设定CPU使用率,动态调整当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数的步骤包括:
所述施压任务的当前线程数根据所述施压任务的初始线程数、步进周期和步进线程数进行步进,console端在预设周期遍历所有当前施压的施压机的实际CPU使用率;
若当前施压的施压机的实际CPU使用率小于所述第二设定CPU使用率,则继续使用所述当前施压的施压机进行施压,若当前施压的施压机的实际CPU使用率大于或等于所述第二设定CPU使用率,则在所述所有施压的施压机中换台施压机进行施压,直到所述所有施压的施压机提供的总线程数等于所述施压任务的总线程数;
并且,在步进过程中,若当前施压的施压机存在实际CPU使用率大于所述第二设定CPU使用率的,则减少实际CPU使用率大于所述第二设定CPU使用率的施压机的线程数。
本发明实施例还提供了一种梯度压力测试装置,包括:
施压机算力计算模块,用于采用公式S=(Z×H)/(z×h)×m计算单台施压机算力,其中,S表示单台施压机算力,Z表示单台施压机的CPU的主频,H表示单台施压机的CPU的核数,z表示单台标准算力机的CPU的主频,h表示单台标准算力机的CPU的核数,m表示标准算力机的算力系数;
施压任务初始线程算力计算模块,用于计算施压任务的初始线程数对应的算力;
初始施压机数量计算模块,用于根据所述单台施压机算力和所述施压任务的初始线程数对应的算力,计算所述施压任务的初始线程数对应的施压机数量,得到施压机的初始数量;
梯度压力测试模块,用于在进行梯度压力测试的过程中,采用初始数量的施压机开始执行所述施压任务,以及在所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数,其中,所述初始数量的施压机在执行所述施压任务时提供的总线程数和所述施压任务的初始线程数相等,所述施压任务信息包括总线程数、初始线程数、步进周期和步进线程数。
本发明实施例还提供了一种电子设备,包括处理器、存储器和上述的梯度压力测试装置,所述梯度压力测试装置包括一个或多个存储于所述存储器并由所述处理器执行的软件功能模块。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被执行时,可实现上述的梯度压力测试方法。
本发明提供的梯度压力测试方法、装置及电子设备将施压机资源转换位算力,将施压任务的初始线程数转换为算力,确定施压任务的初始线程数对应的施压机数量,并且所述施压任务的当前线程数在根据所述施压任务的总线程数、初始线程数、步进周期和步进线程数步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,即采用梯度加压方式自动调整所需的施压机个数和/或每台施压机上的线程数,不仅避免了用户手动调整施压机个数带来的费时费力,也避免了浪费施压机资源的问题;及通过第一设定CPU使用率进行限制避免施压机处于过载状态,避免出现压测数据不准的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例提供的电子设备的示意性结构框图。
图2为本发明实施例提供的一种梯度压力测试方法的流程示意图。
图3为一实施方式中图2所示步骤S200包括的子步骤的示意图。
图4为一实施方式中图2所示步骤S300包括的子步骤的示意图。
图5为一实施方式中图2所示步骤S500包括的子步骤的示意图。
图6为本发明实施例提供的另一种梯度压力测试方法的流程示意图。
图7为本发明实施例提供的另一种梯度压力测试方法的流程示意图。
图8为一实施方式中图7所示步骤S800包括的子步骤的示意图。
图9为本发明实施例提供的另一种梯度压力测试方法的流程示意图。
图10为本发明实施例提供的一种梯度压力测试装置的示意性结构框图。
图标:100-电子设备;110-梯度压力测试装置;111-施压机算力计算模块;112-施压任务初始线程算力计算模块;113-初始施压机数量计算模块;114-梯度压力测试模块;120-处理器;130-存储器。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
请参阅图1,为本发明实施例提供的一种应用梯度压力测试方法及装置的电子设备100的示意性结构框图。进一步地,本发明实施例中,所述电子设备100包括梯度压力测试装置110、处理器120和存储器130。
处理器120和存储器130之间直接或间接地电性连接,以实现数据的传输或交互,例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。梯度压力测试装置110包括至少一个可以以软件或固件(Firmware)的形式存储在存储器130中或固化在电子设备100的操作系统(Operating System,OS)中的软件模块。处理器120用于执行存储器130中存储的可执行模块,例如,梯度压力测试装置110所包括的软件功能模块及计算机程序等。处理器120可以在接收到执行指令后,执行计算机程序。
其中,处理器120可以是一种集成电路芯片,具有信号处理能力。处理器120也可以是通用处理器,例如,可以是数字信号处理器(DSP)、专用集成电路(ASIC)、分立门或晶体管逻辑器件、分立硬件组件,可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。此外,通用处理器可以是微处理器或者任何常规处理器等。
存储器130可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦可编程序只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦编程只读存储器Electric Erasable Programmable Read-Only Memory,EEPROM)等。存储器130用于存储程序,处理器120在接收到执行指令后,执行该程序。
应当理解,图1所示的结构仅为示意,本发明实施例提供的电子设备100还可以具有比图1更少或更多的组件,或是具有与图1所示不同的配置。此外,图1所示的各组件可以通过软件、硬件或其组合实现。
请参阅图2,图2为本发明实施例提供的梯度压力测试方法的流程示意图,该方法应用于图1所示的电子设备100。所应说明的是,本发明实施例提供的方法不以图2及以下所示的顺序为限制,以下结合图2对所述梯度压力测试方法的具体流程及步骤进行详细阐述。
步骤S100,采用公式S=(Z×H)/(z×h)×m计算单台施压机算力。
其中,S表示单台施压机算力,Z表示单台施压机的CPU的主频,H表示单台施压机的CPU的核数,z表示单台标准算力机的CPU的主频,h表示单台标准算力机的CPU的核数,m表示标准算力机的算力系数。影响施压机的算力主要有CPU、内存和IO。由于内存、IO的对施压机的算力影响较小。因此,在此仅以CPU的性能作为施压机的算力,以简化计算。
例如,标准算力机的CPU是4核2.1GHz,其算力系数假定为100,即单台标准算力机的算力为100。那么如果施压机的CPU是8核2.1GHz,那么施压机的算力就为(2.1×8)/(2.1×4)×100=200。
在进行梯度压力测试时,首先需要确定施压任务的初始线程数对应的施压机的个数,然后开始施压。为了确定初始线程数对应的施压机的个数,本发明采用步骤S100将施压机资源抽象成算力,采用步骤S200将施压任务的初始线程数转换成算力,再采用步骤S300根据施压任务的初始线程数的算力确定初始线程数对应的施压机数量,就可以避免了用户随意估计初始线程数对应的施压机数量造成资源浪费。
步骤S200,计算施压任务的初始线程数对应的算力。
进一步地,请参阅图3,步骤S200可以包括子步骤S210、子步骤S230和子步骤S250。
子步骤S210,获取所述施压任务的响应时间。
通过试跑一次施压任务脚本就可以获得所述施压任务的响应时间。
子步骤S230,根据所述施压任务的响应时间获取单台所述标准算力机执行所述施压任务时的最优线程数量。
根据所述施压任务的响应时间获取单台所述标准算力机执行所述施压任务时的最优线程数量的理论依据可以莫谷在阿里云发表的题为《性能优化公式与实践》的文章。对于同一标准算力机执行,其执行任务时的最优线程数量与任务的响应时间具有对应关系,可以根据任务的响应时间确定标准算力执行任务时的最优线程数量。例如,将任务的响应时间记为RT,将标准算力执行任务时的最优线程数量记为Threads,则对于CPU为4核2.1GHz的标准算力机,RT和Threads的对应关系可以如下所示:
RT<1ms按1ms算;
RT=1ms,Threads=40;
RT=10ms,Threads=200;
RT=100ms,Threads=1000;
RT=1000ms,Threads=5000;
RT>1000ms按1000ms算。
子步骤S250,根据所述施压任务的初始线程数及单台所述标准算力机执行所述施压任务时的最优线程数量,计算所述施压任务的初始线程数对应的算力。
以前面的数据为例进行说明:通过试跑一次施压任务脚本就可以获得所述施压任务的响应时间,假定为10ms;则根据所述施压任务的响应时间获取单台所述标准算力机执行所述施压任务时的最优线程数量,即200;根据施压任务信息可以得到所述施压任务的初始线程数,假定为70;则利用初始线程数除以最优线程数量的积再乘以标准算力机的算力系数即可获得初始线程数对应的算力,即70/200×100=35。因此,对于此施压任务,初始线程数70对应的算力为35。
步骤S300,根据所述单台施压机算力和所述施压任务的初始线程数对应的算力,计算所述施压任务的初始线程数对应的施压机数量,得到施压机的初始数量。
进一步地,请参阅图4,步骤S300可以包括子步骤S310和子步骤S330。
子步骤S310,将所述施压任务的初始线程数对应的算力除以所述单台施压机的算力得到商。
子步骤S330,将所述商向上取整得到整数,使所述施压任务的初始线程数对应的施压机数量等于所述整数。
对于初始线程数对应的施压机数量应为整数,为了防止施压机过载,需要对所述施压任务的初始线程数对应的算力除以所述单台施压机的算力的商向上取整。为了便于描述,继续以上面的数据为例,即施压任务的初始线程数70对应的算力为35,单台施压机算力为200,则初始线程数70对应的施压机数量等于35除以200的商0.175向上取整,即1。因此初始线程数70对应的施压机数量等于1。
步骤S400,在进行梯度压力测试的过程中,采用初始数量的施压机开始执行所述施压任务。
其中,所述初始数量的施压机在执行所述施压任务时提供的总线程数和所述施压任务的初始线程数相等。在刚开始进行梯度压力测试时,需施压机提供施压任务所需的初始线程数。本发明采用初始线程数对应的施压机数量来进行施压,可以有效避免施压机资源浪费。即,在初始时,采用1台施压机提供70初始线程数开始施压。当然若初始线程数较大,例如初始线程数为500,则其算力为500/200×100=250,而1台施压机的算力为200,则当初始线程数为500时需要2台施压机。此时,这两台施压机共同提供250初始线程数开始施压,例如,可以是其中一台施压机提供150初始线程数,另一台施压机提供100初始线程数开始施压。
步骤S500,所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数。
其中,所述施压任务信息包括总线程数、初始线程数、步进周期和步进线程数。施压机的第一设定CPU使用率为常量,即所有施压机的第一设定CPU使用率都是相同的。用于与施压机的实际CPU使用率做比较,使施压机的实际CPU使用率低于或等于第一设定CPU使用率,防止施压机负载太大。例如,在施压机的第一设定CPU使用率可以为50%、60%等。
对于步骤500,其部分程序代码如下:
进一步地,请参阅图5,步骤S500可以包括子步骤S510、子步骤S530和子步骤S550。
子步骤S510,所述施压任务的当前线程数根据所述施压任务的初始线程数、步进周期和步进线程数进行步进,console端在预设周期遍历所有当前施压的施压机的实际CPU使用率。
对于根据所述施压任务的初始线程数、步进周期和步进线程数进行步进,获得当前线程数的代码如下:
int targetThreads=(int)(scene.getStepInit()+(System.currentTimeMillis()-beginTime)/(1000*scene.getStepTime())*scene.getStepAdd());
retum targetThreads<scene.getTargetThreads()?targetThreads:scene.getTargetThreads();
子步骤S530,若当前施压的施压机的实际CPU使用率小于所述第一设定CPU使用率,则继续使用所述当前施压的施压机进行施压,若当前施压的施压机的实际CPU使用率大于或等于所述第一设定CPU使用率,则新增施压机进行施压,直到所有施压机提供的总线程数等于所述施压任务的总线程数。
子步骤S550,在步进过程中,若当前施压的施压机存在实际CPU使用率大于所述第一设定CPU使用率的,则减少实际CPU使用率大于所述第一设定CPU使用率的施压机的线程数。
为了便于理解,对于子步骤S510、子步骤S530和子步骤S550,在此以实际数据为例进行说明。在一次梯度加压测试中,施压任务信息为:总线程数1000、初始线程数70、步进周期1s和步进线程数10,第一设定CPU使用率为50%,单台施压机算力为200,施压任务的响应时间为10ms,以及console端遍历施压机的预设周期为500ms,则执行所述施压任务的过程为:
0s:所述施压任务启动,由1台施压机提供70个初始线程。
0.5s:console端检查该1台施压机的实际CPU使用率,发现其实际CPU使用率不到50%;且由于步进周期1s未到,则什么也不做。
1s:console端再次检查该1台施压机的实际CPU使用率发现其实际CPU使用率不到50%;步进周期1s满足,需要增加10个线程。
ns:n为整数,假定此时当前施压的施压机为1台,当前线程数不到1000,则console端会检查该台施压机的实际CPU使用率,若该台施压机的实际CPU使用率小于50%,则在该台施压机上增加10个线程;若该台施压机的实际CPU使用率大于或等于50%,则新增1台施压机来提供这10个线程。
......,
x+0.5s:x为整数,假定此时当前施压的施压机为1台,console端检查该台施压机的实际CPU使用率,若该台施压机的实际CPU使用率小于50%,则什么也不做;若该台施压机的实际CPU使用率大于或等于50%,则减少该台施压机的线程数,并且新增1台施压机来提供与减少的线程数相等的线程数。
......
ms:m为整数,假定此时当前施压的施压机为2台,当前线程数不到1000,console端检查该2台施压机的实际CPU使用率,若该2台施压机的实际CPU使用率均小于50%,则在该2台施压机上增加10个线程,该10个线程可以是由实际CPU使用率更低的一台施压机提供,该10个线程也可以是由2台中任何一台施压机提供,该10个线程也可以是由2台施压机均分即各提供5个,该10个线程也可以是由2台施压机不均分提供;若该2台施压机中有1台施压机的实际CPU使用率大于或等于50%,另一台施压机的实际CPU使用率小于50%,则利用实际CPU使用率小于50%的施压机来提供这10个线程;若该2台施压机的实际CPU使用率均大于或等于50%,则新增1台施压机来提供这10个线程。
......
y+0.5s:y为整数,假定此时当前施压的施压机为2台,console端检查该2台施压机的实际CPU使用率,若该2台施压机的实际使用率均小于50%,则什么也不做;若其中一台施压机的实际CPU使用率大于50%,另一台施压机的实际CPU使用率小于50%,则减少实际CPU使用率大于50%的施压机的线程数,并将减少的线程数增加到另一台实际CPU使用率小于50%的施压机上;若该2台施压机的实际CPU使用率均大于或等于50%,则减少该2台施压机的线程数,并且新增1台施压机来提供与减少的线程数相等的线程数。
......
直到所有施压机提供的总线程数等于所述施压任务的总线程数。
进一步地,请参阅图6,所述梯度压力测试方法还包括:步骤S600和步骤S700。
步骤S600,获取所述施压任务关联的所有施压的施压机列表,所述施压机列表包括所述施压任务关联的所有施压的施压机IP、每个施压的施压机包括的进程ID和每个进程包括的线程数。
对于步骤S600,其部分代码如下:
private long puid;//puid代表进程id
private String ip;//ip代表施压机ip
private int port;//port代表施压机上进程绑定端口,用于console连接
private int threads;//threads代表压力分布在该进程上的线程数
步骤S700,根据所述施压机列表,在所述施压任务关联的施压机异常时,将异常的施压机从所述施压任务压力分布中过滤,并将与所述异常的施压机提供的线程数相等的线程补充至所述施压任务中。
根据所述施压机列表可以清楚知道各施压机的工作情况,如各施压机包括的进程列表及每个进程包括的线程数,因此可以使console端每隔一定时间如500ms,遍历各施压机,当存在施压机掉线时,可以最长在500ms内被发现,并将与所述异常的施压机提供的线程数相等的线程补充至所述施压任务中,解决了传统NGrinder、Jmeter在施压机异常时任务压力出现下降的问题。
对于步骤S700,其部分代码如下:
List<PressureProcessUnitInfo>validPressureInfos=filterInvalidInfos(TaskPressureInfoHolder.getPressureInfos(task.getId()));
进一步地,请参阅图7,当所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,直到所有空闲的施压机均用于施压且所述所有施压的施压机提供的总线程数小于所述施压任务的总线程数时,所述梯度压力测试方法还包括:步骤S800。
由前文可知,第一设定CPU使用率用于与施压机的实际CPU使用率做比较,在梯度压力测试中作为控制条件,使各施压机的实际CPU使用率低于或等于第一设定CPU使用率,防止施压机负载太大。当空闲的施压机不多时,可能出现以下问题:所有空闲的施压机在实际CPU使用率等于第一设定CPU使用率的条件下,提供的总线程数小于所述施压任务的总线程数,则无法完成施压任务。为了解决上述问题,可以增大对施压机的设定CPU使用率的限制,因此引入施压机的CPU的第二设定CPU使用率,且所述施压机的第二设定CPU使用率大于第一设定CPU使用率。施压机的第二设定CPU使用率是常量,即所有施压机的第二设定CPU使用率都是相同的。所述施压机的第二设定CPU使用率是施压机的极限CPU使用率,即当所述施压机的实际CPU使用率大于第二设定CPU使用率时,施压机处于过载状态,导致施压机压测统计数据如接口响应时间RT会偏大不准确,压测数据没有参考意义。所述施压机的第二设定CPU使用率可以是70%、80%等。
步骤S800,所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第二设定CPU使用率,动态调整当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数。
即,在步骤S500后,当所有空闲的施压机均被用于施压,且各施压的施压机的均实际CPU使用率等于第一设定CPU使用率时,所有施压的施压机提供的总线程数小于所述施压任务的总线程数,此时,所述施压任务的总线程数、初始线程数、步进周期和步进线程数继续步进,当当前施压的施压机的实际CPU使用率小于第二设定CPU使用率时即可增加当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数。
进一步,请参阅图8,步骤S800包括子步骤S810、子步骤S830和子步骤S850。
子步骤S810,所述施压任务的当前线程数根据所述施压任务的初始线程数、步进周期和步进线程数进行步进,console端在预设周期遍历所有当前施压的施压机的实际CPU使用率。
子步骤S830,若当前施压的施压机的实际CPU使用率小于所述第二设定CPU使用率,则继续使用所述当前施压的施压机进行施压,若当前施压的施压机的实际CPU使用率大于或等于所述第二设定CPU使用率,则在所述所有施压的施压机中换台施压机进行施压,直到所述所有施压的施压机提供的总线程数等于所述施压任务的总线程数。
子步骤S850,在步进过程中,若当前施压的施压机存在实际CPU使用率大于所述第二设定CPU使用率的,则减少实际CPU使用率大于所述第二设定CPU使用率的施压机的线程数。
由于子步骤S810、子步骤S830和子步骤S850分别与子步骤S510、子步骤S530和子步骤S550类似,则在此不作赘述。
进一步地,请参阅图9,当所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第二设定CPU使用率,动态调整当前施压的施压机上的线程数,直到所有施压的施压机的CPU使用率均等于所述第二设定CPU使用率且所述所有施压的施压机提供的总线程数小于所述施压任务的总线程数时,所述梯度压力测试方法还包括:步骤S900和步骤S950。
可以设想,当施压任务的总线程数较大,可能出现以下问题:所有空闲的施压机均被用于施压,且各施压的施压机的实际CPU使用率均等于第二设定CPU的条件下,提供的总线程数小于所述施压任务的总线程数,则无法完成施压任务。由于所述第二设定CPU使用率是施压机的极限CPU使用率,即当所述施压机的实际CPU使用率大于第二设定CPU使用率时,施压机处于过载状态,压测数据没有参考意义。因此,各施压的施压机的实际CPU使用率不能超过第二设定CPU使用率。所以为了解决上述问题,可以调用其他任务关联的实际CPU使用率小于所述第二CPU使用率的施压机对所述施压任务进行施压,并且在施压过程中,控制所有施压的施压机的实际CPU使用率不大于所述第二设定CPU使用率。
步骤S900,调用其他任务关联的实际CPU使用率小于所述第二设定CPU使用率的施压机对所述施压任务进行施压,直到所有施压的施压机提供的用于所述施压任务的总线程数等于所述施压任务的总线程数。
步骤S950,在施压过程中,控制所有施压的施压机的实际CPU使用率不大于所述第二设定CPU使用率。
基于与上述梯度压力测试方法同样的发明构思,本发明实施例还提供了一种梯度压力测试装置110。请参阅图10,所述梯度压力测试装置110包括施压机算力计算模块111、施压任务初始线程算力计算模块112、初始施压机数量计算模块113和梯度压力测试模块114。
其中,施压机算力计算模块111用于采用公式S=(Z×H)/(z×h)×m计算单台施压机算力。关于所述施压机算力计算模块111的描述具体可参考对图2中所示的步骤S100的详细描述,也即,步骤S100可以由所述施压机算力计算模块111执行。
其中,S表示单台施压机算力,Z表示单台施压机的CPU的主频,H表示单台施压机的CPU的核数,z表示单台标准算力机的CPU的主频,h表示单台标准算力机的CPU的核数,m表示标准算力机的算力系数。
施压任务初始线程算力计算模块112用于计算施压任务的初始线程数对应的算力。关于所述施压任务初始线程算力计算模块112的描述具体可参考对图2中所示的步骤S200的详细描述,也即,步骤S200可以由所述施压任务初始线程算力计算模块112执行。
初始施压机数量计算模块113用于根据所述单台施压机算力和所述施压任务的初始线程数对应的算力,计算所述施压任务的初始线程数对应的施压机数量,得到施压机的初始数量。关于所述初始施压机数量计算模块113的描述具体可参考对图2中所示的步骤S300的详细描述,也即,步骤S300可以由所述初始施压机数量计算模块113执行。
梯度压力测试模块114用于在进行梯度压力测试的过程中,采用初始数量的施压机开始执行所述施压任务,以及在所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数。其中,所述初始数量的施压机在执行所述施压任务时提供的总线程数和所述施压任务的初始线程数相等,所述施压任务信息包括总线程数、初始线程数、步进周期和步进线程数。关于所述梯度压力测试模块114的描述具体可参考对图2中所示的步骤S400和步骤S500的详细描述,也即,步骤S400和步骤S500可以由所述梯度压力测试模块114执行。
综上所述,本发明实施例提供的梯度压力测试方法、装置及电子设备100,将施压机资源转换位算力,将施压任务的初始线程数转换为算力,确定施压任务的初始线程数对应的施压机数量,并且所述施压任务的当前线程数在根据所述施压任务的总线程数、初始线程数、步进周期和步进线程数步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,即采用梯度加压方式自动调整所需的施压机个数和/或每台施压机上的线程数,不仅避免了用户手动调整施压机个数带来的费时费力,也避免了浪费施压机资源的问题;及通过第一设定CPU使用率进行限制避免施压机处于过载状态,避免出现压测数据不准的问题。此外,当施压任务的总线程数较大,空闲的施压机不够时,本发明实施例提供的梯度压力测试方法、装置及电子设备100通过增大对施压机CPU使用率的限制,使实际CPU使用率不高于第二设定CPU使用率的施压机的继续施压,直到所有施压机提供的总线程数等于所述施压任务的总线程数,避免了施压任务无法完成的问题。并且,当施压任务的总线程数非常大,所有施压的施压机的CPU使用率均等于所述第二设定CPU使用率的条件下,所述所有施压的施压机提供的总线程数仍小于所述施压任务的总线程数时,本发明实施例提供的梯度压力测试方法、装置及电子设备100调用其他任务关联的CPU使用率小于所述第二CPU使用率的施压机对所述施压任务进行施压,并且在施压过程中,控制所有施压的施压机的实际CPU使用率不大于所述第二设定CPU使用率,避免了施压任务无法完成的问题。同时,本发明实施例提供的梯度压力测试方法、装置及电子设备100采用console端遍历施压机列表,可以及时发现掉线施压机,并将与所述异常的施压机提供的线程数相等的线程补充至所述施压任务中,解决了传统NGrinder、Jmeter在施压机异常时任务压力出现下降的问题。
在本发明实施例所提供的上述实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本公开的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本公开各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本公开各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上仅为本公开的可选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (10)
1.一种梯度压力测试方法,其特征在于,所述方法包括:
采用公式S=(Z×H)/(z×h)×m计算单台施压机算力,其中,S表示单台施压机算力,Z表示单台施压机的CPU的主频,H表示单台施压机的CPU的核数,z表示单台标准算力机的CPU的主频,h表示单台标准算力机的CPU的核数,m表示标准算力机的算力系数;
计算施压任务的初始线程数对应的算力;
根据所述单台施压机算力和所述施压任务的初始线程数对应的算力,计算所述施压任务的初始线程数对应的施压机数量,得到施压机的初始数量;
在进行梯度压力测试的过程中,采用初始数量的施压机开始执行所述施压任务,其中,所述初始数量的施压机在执行所述施压任务时提供的总线程数和所述施压任务的初始线程数相等;
所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数,其中,所述施压任务信息包括总线程数、初始线程数、步进周期和步进线程数。
2.根据权利要求1所述的梯度压力测试方法,其特征在于,所述计算施压任务的初始线程数对应的算力的步骤包括:
获取所述施压任务的响应时间;
根据所述施压任务的响应时间获取单台所述标准算力机执行所述施压任务时的最优线程数量;
根据所述施压任务的初始线程数及单台所述标准算力机执行所述施压任务时的最优线程数量,计算所述施压任务的初始线程数对应的算力。
3.根据权利要求1所述的梯度压力测试方法,其特征在于,所述根据所述单台施压机算力和所述施压任务的初始线程数对应的算力,计算所述施压任务的初始线程数对应的施压机数量,得到施压机的初始数量的步骤包括:
将所述施压任务的初始线程数对应的算力除以所述单台施压机的算力得到商;
将所述商向上取整得到整数,使所述施压任务的初始线程数对应的施压机数量等于所述整数。
4.根据权利要求1所述的梯度压力测试方法,其特征在于,所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数的步骤包括:
所述施压任务的当前线程数根据所述施压任务的初始线程数、步进周期和步进线程数进行步进,console端在预设周期遍历所有当前施压的施压机的实际CPU使用率;
若当前施压的施压机的实际CPU使用率小于所述第一设定CPU使用率,则继续使用所述当前施压的施压机进行施压,若当前施压的施压机的实际CPU使用率大于或等于所述第一设定CPU使用率,则新增施压机进行施压,直到所有施压机提供的总线程数等于所述施压任务的总线程数;
并且,在步进过程中,若当前施压的施压机存在实际CPU使用率大于所述第一设定CPU使用率的,则减少实际CPU使用率大于所述第一设定CPU使用率的施压机的线程数。
5.根据权利要求1-4任一项所述的梯度压力测试方法,其特征在于,所述梯度压力测试方法还包括:
获取所述施压任务关联的所有施压的施压机列表,所述施压机列表包括所述施压任务关联的所有施压的施压机IP、每个施压的施压机包括的进程ID和每个进程包括的线程数;
根据所述施压机列表,在所述施压任务关联的施压机异常时,将异常的施压机从所述施压任务压力分布中过滤,并将与所述异常的施压机提供的线程数相等的线程补充至所述施压任务中。
6.根据权利要求1-4任一项所述的梯度压力测试方法,其特征在于,当所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,直到所有空闲的施压机均用于施压且所述所有施压的施压机提供的总线程数小于所述施压任务的总线程数时,所述方法还包括:
所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第二设定CPU使用率,动态调整当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数;
其中,所述施压机的第二设定CPU使用率大于第一设定CPU使用率。
7.根据权利要求6所述的梯度压力测试方法,其特征在于,所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第二设定CPU使用率,动态调整当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数的步骤包括:
所述施压任务的当前线程数根据所述施压任务的初始线程数、步进周期和步进线程数进行步进,console端在预设周期遍历所有当前施压的施压机的实际CPU使用率;
若当前施压的施压机的实际CPU使用率小于所述第二设定CPU使用率,则继续使用所述当前施压的施压机进行施压,若当前施压的施压机的实际CPU使用率大于或等于所述第二设定CPU使用率,则在所述所有施压的施压机中换台施压机进行施压,直到所述所有施压的施压机提供的总线程数等于所述施压任务的总线程数;
并且,在步进过程中,若当前施压的施压机存在实际CPU使用率大于所述第二设定CPU使用率的,则减少实际CPU使用率大于所述第二设定CPU使用率的施压机的线程数。
8.一种梯度压力测试装置,其特征在于,包括:
施压机算力计算模块,用于采用公式S=(Z×H)/(z×h)×m计算单台施压机算力,其中,S表示单台施压机算力,Z表示单台施压机的CPU的主频,H表示单台施压机的CPU的核数,z表示单台标准算力机的CPU的主频,h表示单台标准算力机的CPU的核数,m表示标准算力机的算力系数;
施压任务初始线程算力计算模块,用于计算施压任务的初始线程数对应的算力;
初始施压机数量计算模块,用于根据所述单台施压机算力和所述施压任务的初始线程数对应的算力,计算所述施压任务的初始线程数对应的施压机数量,得到施压机的初始数量;
梯度压力测试模块,用于在进行梯度压力测试的过程中,采用初始数量的施压机开始执行所述施压任务,以及在所述施压任务的当前线程数在根据所述施压任务的施压任务信息步进时,基于所述施压任务的当前线程数及施压机的第一设定CPU使用率,动态调整当前施压的施压机数量和/或当前施压的施压机上的线程数,直到所有施压机提供的总线程数等于所述施压任务的总线程数,其中,所述初始数量的施压机在执行所述施压任务时提供的总线程数和所述施压任务的初始线程数相等,所述施压任务信息包括总线程数、初始线程数、步进周期和步进线程数。
9.一种电子设备,其特征在于,包括处理器、存储器和权利要求8所述的梯度压力测试装置,所述梯度压力测试装置包括一个或多个存储于所述存储器并由所述处理器执行的软件功能模块。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被执行时,可实现权利要求1-7中任意一项所述的梯度压力测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811194954.5A CN109308397B (zh) | 2018-10-16 | 2018-10-16 | 梯度压力测试方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811194954.5A CN109308397B (zh) | 2018-10-16 | 2018-10-16 | 梯度压力测试方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109308397A CN109308397A (zh) | 2019-02-05 |
CN109308397B true CN109308397B (zh) | 2022-05-10 |
Family
ID=65224480
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811194954.5A Active CN109308397B (zh) | 2018-10-16 | 2018-10-16 | 梯度压力测试方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109308397B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678016A (zh) * | 2013-12-25 | 2014-03-26 | 中山市拓电电子科技有限公司 | 一种用于电脑主板测试时压紧cpu的方法 |
CN105446860A (zh) * | 2015-11-11 | 2016-03-30 | 上海欣方智能系统有限公司 | 基于异步并发机制的压力测试系统和测试方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6643765B1 (en) * | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
US9152528B2 (en) * | 2010-08-27 | 2015-10-06 | Red Hat, Inc. | Long term load generator |
-
2018
- 2018-10-16 CN CN201811194954.5A patent/CN109308397B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678016A (zh) * | 2013-12-25 | 2014-03-26 | 中山市拓电电子科技有限公司 | 一种用于电脑主板测试时压紧cpu的方法 |
CN105446860A (zh) * | 2015-11-11 | 2016-03-30 | 上海欣方智能系统有限公司 | 基于异步并发机制的压力测试系统和测试方法 |
Non-Patent Citations (2)
Title |
---|
Large-scale Parallelization of Smoothed Particle Hydrodynamics Method on Heterogeneous Cluster;Yingrui Wang 等;《2017 46th International Conference on Parallel Processing (ICPP)》;20170907;第21-30页 * |
SpMT WaveCache:开发数据流计算机中的推测多线程;裴颂文 等;《计算机学报》;20090715;第1382-1392页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109308397A (zh) | 2019-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110196767B (zh) | 服务资源控制方法、装置、设备和存储介质 | |
EP3467651B1 (en) | Method, device and terminal for allocating computational resources of processor | |
CN107797853B (zh) | 一种任务调度方法、装置及多核处理器 | |
CN110908940B (zh) | 串口通讯参数调整的方法及终端设备 | |
CN107483351A (zh) | 一种限流方法及装置 | |
CN110896357B (zh) | 流量预测方法、装置和计算机可读存储介质 | |
CN106095047B (zh) | 一种控制方法及电子设备 | |
CN110659130A (zh) | Cpu使用率自适应调整方法、装置、终端及存储介质 | |
CN102141934A (zh) | 一种胖节点上的进程控制方法及装置 | |
CN109308397B (zh) | 梯度压力测试方法、装置及电子设备 | |
CN109857633B (zh) | 一种任务算力估计方法、装置和存储介质 | |
CN109406025B (zh) | 压力测试方法、装置及电子设备 | |
CN115794342A (zh) | 流水线任务剩余时间估算方法、装置及电子设备 | |
CN112333246B (zh) | 一种ABtest实验方法、装置、智能终端及存储介质 | |
CN110647437B (zh) | 基于pid控制器调整cpu使用率的方法、装置、终端及介质 | |
CN111858200A (zh) | 系统测试中的吞吐量控制方法、装置及电子设备 | |
CN112256383A (zh) | 虚拟机的cpu核心数的调整方法、装置、设备及介质 | |
CN107872480A (zh) | 大数据集群数据平衡方法和装置 | |
CN108235422B (zh) | 天线功率的设置方法及电子装置 | |
CN114490374A (zh) | 应用的压力测试方法、电子设备、存储介质及程序产品 | |
DE112017006454B4 (de) | Computervorrichtung, Aufgabeneinleitungsverfahren und Aufgabeneinleitungsprogramm | |
CN115498735A (zh) | 一种燃料电池单体电压监控方法及燃料电池控制器 | |
CN109298944B (zh) | 服务器压力调节方法及装置、计算机装置及存储介质 | |
CN110673977B (zh) | 一种数据恢复的优化方法、装置、设备及介质 | |
CN113311706B (zh) | 高性能超前观测器的高频噪声功率增益的自动跟踪方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |