CN112559276B - 一种cpu使用率监控方法及装置 - Google Patents

一种cpu使用率监控方法及装置 Download PDF

Info

Publication number
CN112559276B
CN112559276B CN201910854938.2A CN201910854938A CN112559276B CN 112559276 B CN112559276 B CN 112559276B CN 201910854938 A CN201910854938 A CN 201910854938A CN 112559276 B CN112559276 B CN 112559276B
Authority
CN
China
Prior art keywords
cpu
utilization rate
early warning
target variable
value
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
Application number
CN201910854938.2A
Other languages
English (en)
Other versions
CN112559276A (zh
Inventor
张磊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201910854938.2A priority Critical patent/CN112559276B/zh
Publication of CN112559276A publication Critical patent/CN112559276A/zh
Application granted granted Critical
Publication of CN112559276B publication Critical patent/CN112559276B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3024Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种CPU使用率监控方法及装置,所述方法包括:采用一预定义的目标变量在预设次数内进行循环计算;调用System.currentTime()函数获取所述目标变量进行首次循环计算时的起始时间;判断所述目标变量的循环计算次数是否达到所述预设次数的末次,若是则调用System.currentTime()函数获取所述目标变量进行末次循环计算时的结束时间;根据所述起始时间与所述结束时间的时间差值,获得CPU的维度数据;其中,所述维度数据表示所述CPU的繁忙程度;基于等式Y=M/(delT*delT),获得所述CPU使用率的评估值;其中,Y为评估值,M为调节系数,delT为维度数据;根据所述评估值,获得所述CPU的使用率。本发明节省了获取CPU使用率时的采集开销,提高了系统整体性能。

Description

一种CPU使用率监控方法及装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种CPU使用率监控方法及装置。
背景技术
在传统的Android开发方案中,没有一种针对CPU(central processing unit,中央处理器)使用率监控的预警方案。一般来说对CPU的使用率进行监控就需要获取CPU的数据信息,但目前针对CPU数据的采集通常是使用很复杂的数据解析来获取到CPU数据信息,例如:传统CPU数据获取方案中对手机CPU的数据获取通常都是top命令加解析方法,或者针对系统提供的“/proc/stat”文件解析法。这两种方案都存在非常复杂的解析算法,会导致整体获取到CPU使用率的速度非常的慢,并且还会占用大量的系统计算资源来对CPU的使用率来进行评估,对系统整体性能造成非常大的影响。
发明内容
鉴于上述问题,本发明提出了一种CPU使用率监控方法及装置,节省了获取CPU使用率时的采集开销,提高了系统整体性能。
第一方面,本申请通过一实施例提供如下技术方案:
一种CPU使用率监控方法,所述方法包括:
采用一预定义的目标变量在预设次数内进行循环计算;调用System.currentTime()函数获取所述目标变量进行首次循环计算时的起始时间;判断所述目标变量的循环计算次数是否达到所述预设次数的末次;若是,则调用System.currentTime()函数获取所述目标变量进行末次循环计算时的结束时间;根据所述起始时间与所述结束时间的时间差值,获得CPU的维度数据;其中,所述维度数据表示所述CPU的繁忙程度;基于等式Y=M/(delT*delT),获得所述CPU使用率的评估值;其中,Y为评估值,所述评估值用于评估所述CPU使用率的大小,M为调节系数,delT为维度数据;根据所述评估值,获得所述CPU的使用率。
优选地,所述采用一预定义的目标变量在预设次数内进行循环计算,包括:
对所述目标变量初始化为0;在所述预设次数内,对所述目标变量执行for循环,其中每次循环对所述目标变量进行加一循环。
优选地,所述判断所述目标变量的循环计算次数是否达到所述预设次数的末次,包括:
判断所述目标变量的值是否达到最大预设次数,若是则判断所述目标变量的当前计算次数为所述预设次数的末次。
优选地,所述根据所述评估值,获得所述CPU的使用率,包括:
判断所述评估值是否大于1;若所述评估值不大于1,则将所述评估值作为表征所述CPU的使用率的值;若所述评估值大于1,则对所述评估值进行除以10的运算直至首次获得小于1的调整值;其中,所述调整值为表征所述CPU的使用率的值。
优选地,M的取值为100。
优选地,所述根据所述维度数据与预设的调节系数,获得所述CPU的使用率之后,还包括:
周期性的判断所述CPU的使用率是否大于预设的使用阈值;若当前周期内所述CPU的使用率大于所述使用阈值,则向用户进行预警以避免所述CPU的使用率过大影响采集开销,所述采集开销为采集所述CPU的使用率时花费的开销。
优选地,所述若当前周期内所述CPU的使用率大于所述使用阈值,则向用户进行预警,包括:
定义一预警协议;所述协议包括一预警函数,所述预警函数的返回值为void类型,所述预警函数用于存储所述CPU的使用率以及用于描述当前系统环境的基本参数;定义所述预警协议的实现类;若所述CPU的使用率大于所述使用阈值,则通过所述预警协议的实现类对所述预警协议进行继承并复写所述预警函数,以向用户进行预警。
优选地,所述若所述CPU的使用率大于所述使用阈值,则通过所述预警协议的实现类对所述预警协议进行继承并复写所述预警函数,以向用户进行预警,包括:
若所述CPU的使用率大于所述使用阈值,则采用CacheCenter.get()从缓存中心获取唯一的Any类型的对象;将所述Any类型的对象转换为所述预警协议的对象;基于所述预警协议的对象,调用setCpuUsage()方法以及setSInfo方法,将所述CPU的使用率以及所述基本参数组装为一个包裹对象;调用Gson.toString()方法将所述包裹对象转化为string类型的对象str,并将所述对象str存储到预设的File类对象中;通过HTTP协议将存储有所述对象str的File类对象进行上报以向用户进行预警。
第二方面,基于同一发明构思,本申请通过一实施例提供如下技术方案:
一种CPU使用率监控装置,所述装置包括:
循环计算模块,用于采用一预定义的目标变量在预设次数内进行循环计算;起始时间获取模块,用于调用System.currentTime()函数获取所述目标变量进行首次循环计算时的起始时间;结束时间获取模块,用于判断所述目标变量的循环计算次数是否达到所述预设次数的末次;若是,则调用System.currentTime()函数获取所述目标变量进行末次循环计算时的结束时间;评估值获取模块,用于基于等式Y=M/(delT*delT),获得所述CPU使用率的评估值;其中,Y为评估值,所述评估值用于评估所述CPU使用率的大小,M为调节系数,delT为维度数据;使用率获取模块,用于根据所述评估值,获得所述CPU的使用率。
第三方面,基于同一发明构思,本申请通过一实施例提供如下技术方案:
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一项所述方法的步骤。
在本发明实施例提供的一种CPU使用率监控方法及装置,其中方法通过采用一预定义的目标变量在预设次数内进行循环计算;然后对循环计算的起始时间(即首次计算的时间)以及循环计算的结束时间(即末次计算的时间)进行记录。然后根据所述起始时间与所述结束时间的时间差值,得到CPU的维度数据;该维度数据是根据对目标变量循环计算所花费的时长来获得,可以表征CPU的繁忙程度;而对目标变量的循环计算可以为简单的计算,不需要使用top命令,更不需要对CPU的数据文件进行解析等操作,大大节省了CPU使用率的采集开销,节省了CPU资源。进一步的,基于等式Y=M/(delT*delT),获得CPU使用率的评估值,实现维度数据向CPU使用率进行映射转化。最后,对评估值进行调整,得到CPU的使用率,可最大程度的还原CPU的真实使用率情况。因此,通过本发明来对CPU的使用率进行监控,可节省获取CPU使用率时的采集开销,节省CPU资源,提高了系统整体性能。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明第一实施例提供的一种CPU使用率监控方法的流程图;
图2示出了本发明第二实施例提供的一种CPU使用率监控装置的流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
请参见图1,示出了本发明第一实施例提供的一种CPU使用率监控方法,该方法可应用于操作系统中,所述操作系统可为平板电脑、手机、笔记本电脑、PC(personalcomputer,个人计算机)、可穿戴设备、车载终端等用户终端设备上的操作系统。
本实施例中方法包括:
步骤S10:采用一预定义的目标变量在预设次数内进行循环计算;
步骤S20:调用System.currentTime()函数获取目标变量进行首次循环计算时的起始时间;
步骤S30:判断目标变量的循环计算次数是否达到预设次数的末次;若是,则调用System.currentTime()函数获取目标变量进行末次循环计算时的结束时间;
步骤S40:根据起始时间与结束时间的时间差值,获得CPU的维度数据;其中,维度数据表示所述CPU的繁忙程度;
步骤S50:基于等式Y=M/(delT*delT),获得CPU使用率的评估值;其中,Y为评估值,评估值用于评估CPU使用率的大小,M为调节系数,delT为维度数据;
步骤S60:根据评估值,获得CPU的使用率。
在步骤S10中,具体实施的时候可包括:
步骤S11:对目标变量初始化为0;
步骤S12:在预设次数内,对目标变量执行for循环,其中每次循环对所述目标变量进行加一。
这样将有利于对目标变量的循环次数进行判断。例如当循环次数为两次时,目标变量的值为2(由于目标变量的初始值为0)。所以通过步骤S11-S12对目标变量初始化为0,并进行加1循环,这样在进行循环次数判断的时候,循环次数就等于目标变量的值。
也就是说,在步骤S30中,判断目标变量的循环计算次数是否达到预设次数的末次时,可根据目标变量的值判断目标变量的当前计算次数是否为预设次数的末次。具体的,判断目标变量的值是否达到最大预设次数,若是则判断目标变量的当前计算次数为预设次数的末次。
在本实施例中,除步骤S11-S12之外还具备如下的实施方式:
当目标变量初始值不为0时,例如为n(不为零的数),在预设次数内的每一次循环均对目标变量进行加1运算。当进行循环次数判断的时候,当前循环次数为:目标变量的当前值-n。此外,当目标变量初始值不为0时,例如为m(不为零的数),在预设次数内的每一次循环均对目标变量进行乘2的乘法运算。当进行循环次数判断的时候,当前循环次数为:目标变量的当前值/2m。但是,上述两种循环次数的获取方式相比于步骤S11-S12而言计算量相对更大,将占用更多的计算资源,增加CPU使用率的采集开销。采用上述目标变量初始值不为0的方案进行循环计算,对于单次计算而言对CPU资源的消耗可以接受,系统性能表现不会受到较大影响。但由于CPU的使用率监控需要不间断的执行循环操作,也就是说在CPU使用率监控期间会不间断的进行循环计算,这样的情况下也会长时间的占用CPU资源,显著的降低系统性能。
进一步的在步骤S10中,目标变量可为一局部变量,避免对全局产生影响。另外,预设次数可有用户进行预定义。一般来说为了保证CPU使用率的准确估计,同时还需要避免增加CPU的负担,预设次数可设置为50-400次;例如为100次、150次、200次等。
在步骤S20-S30中,起始时间及结束时间可以是操作系统的时间,或软件程序中所定义的时间。
通过记录对目标变量循环计算的起始时间以及结束时间,就可得到完成一次为预设次数循环的总时间。也即步骤S40。
步骤S40:根据起始时间与结束时间的时间差值,获得CPU的维度数据;其中,维度数据表示CPU的繁忙程度。
在步骤S40中,起始时间与结束时间的时间差值即表示完成一次为预设次数循环计算的总时间,也就是CPU的维度数据。若维度数据越大则表示循环计算消耗的时间越长,CPU越繁忙、使用率较高;若维度数据越小则表示循环计算小号的时间较短,CPU较为空闲、使用率较低。基于此,可进一步的通过CPU的维度数据对CPU的使用率进行表征。
步骤S50:基于等式Y=M/(delT*delT),获得CPU使用率的评估值;其中,Y为评估值,评估值用于评估CPU使用率的大小,M为调节系数,delT为维度数据。
(delT*delT)表示对维度数据进行放大。在消耗少量的CPU资源的情况下,来获得的维度数据一般来说均为较小的值,在将维度数据放大之后可降低单个维度数据的误差值。进一步的,通过一调节系数将维度数据映射为评估使用率的评估值。
在本实施例中调节系数设置过大可能会导致后续工Y值的动态计算次数增多,调剂系数过小可能会导致Y值的动态计算方案失效,所以该调节系数M需要根据平台特性进行相应设计。在本实施例中,以安卓系统为例,调节系数较优选的取值为50-150。可以理解为,当M的值小于50时,最终获得的Y值将出现过小的情况,Y远远小于1,此时会导致动态计算方案失效无法得到CPU的使用率。当M的值大于150时,获取的Y值将较大,此时对Y进行动态计算将增加CPU的开销。同时在实际测试中,再将M值在50-150之间进行动态调整过程中M取值为100时,可使得CPU的使用率采集开销达到最优。另外,本实施例以安卓系统为例时,在纬度数据较小的情况下,M可在向靠近50端点方向取值,例如M可以在50-100区间进行取值;在纬度数据较大的情况下,M可以在向靠近150端点方向取值,例如M可以在100-150区间进行取值。
最后,需要指出的是,在其他的实施方式中,调节系数M的大小可根据具体的系统参数确定,例如在IOS系统,或者安卓系统的不同版本,可以根据纬度数据的大小对M的取值进行适应性的调整。
步骤S60:根据评估值,获得CPU的使用率;其中,调节系数用于将维度数据转化为CPU的使用率。具体包括:
步骤S61:判断评估值是否大于1;
步骤S62:若评估值不大于1,则将评估值作为表征CPU的使用率的值;
步骤S63:若评估值大于1,则对评估值进行除以10的运算直至首次获得小于1的调整值;其中,调整值为表征CPU的使用率的值。
当CPU的使用率较高时,或在对CPU使用率进行监控的过程中使用率出现上升时,为了避免CPU使用率过高对CPU的使用率监控产生影响。可对CPU的使用率进行预警。具体可包括如下步骤:
步骤S71:周期性的判断CPU的使用率是否大于预设的使用阈值;
步骤S72:若当前周期内CPU的使用率大于使用阈值,则向用户进行预警以避免CPU的使用率过大影响采集开销,采集开销为采用CPU的使用率时所花费的开销。
其中,步骤S72具体还包括:
步骤S721:定义一预警协议;预警协议包括一预警函数,预警函数的返回值为void类型,预警函数用于存储CPU的使用率以及用于描述当前系统环境的基本参数;
步骤S722:定义预警协议的实现类;
步骤S723:若所述CPU的使用率大于使用阈值,则通过预警协议的实现类对预警协议进行继承并复写预警函数,以向用户进行预警。
在步骤S723中,具体实现过程如下:若CPU的使用率大于使用阈值,则采用CacheCenter.get()从缓存中心获取Any类型的对象;将Any类型的对象转换为预警协议的对象;基于预警协议的对象,调用setCpuUsage()方法以及setSInfo方法,将CPU的使用率以及基本参数组装为一个包裹对象;调用Gson.toString()方法将包裹对象转化为string类型的对象str,并将对象str存储到预设的File类对象中;通过HTTP协议将存储有对象str的File类对象进行上报以向用户进行预警。通过该种预警方式可以有效且及时的将当前CPU使用率传达给用户,预警过程可靠,并且稳定。
在本实施例中可根据对系统整体性能的稳定性进行使用阈值的设定,例如需要使得系统运行的更加稳定可将使用阈值设置的更小一些,以保证CPU使用率较高时提前预警,可给用户留出更多的反应时间。例如,可将使用阈值设置为70%,当对CPU监控的使用率超过70%后就可触发预警总线实现对性能的预警,具体预警方式在后续以一具体示例进行说明。
以安卓系统为例进行说明,如下:
传统方案中安卓手机CPU的数据通常都是top命令加解析方法,或者针对系统提供的“/proc/stat”文件解析法,这两种方案都存在非常复杂的解析算法,会导致整体获取到CPU使用率的速度非常的慢,并且占用大量的系统资源来对CPU的使用率来进行评估。而本发明中在方案设计的时候为了能够对CPU使用率进行评估,同时又不占用大量的CPU开销去获取CPU使用率,巧妙的设计了CPU的维度数据来对CPU的使用率进行评估。在保证较高评估精度的情况下,能够使用极少CPU开销获取到CPU的使用率。也就是说,我们是通过CPU的维度数据来对CPU的使用率进行抽象表达,为了使CPU的开销尽可能的少,所以要求能够在尽可能短的时间内完成一个并得出一个评估结果。
因此,可先定义一维度函数,可如下:
Fun getCpuWeightInfo():Int{},该函数的名称是getCpuWeightInfo,入参参数为空,返回值是一个Int类型的数据,该Int值是一个CPU维度数据的值,后续还需要通过算法来将该CPU维度数据转换为一个CPU的使用率的评估值。
getCpuWeightInfo函数的具体实现方法为:定义一个局部的变量(即目标变量)val count:Int=0,该局部变量的初始值为0;再定义一个起始时间startTime和结束时间endTime,并对其初始化为0,具体的定义如下Val startTime:Long=0和Val endTime:Long=0。然后执行一个for循环,每一次循环时对目标变量count进行加1运算。
循环次数我们设置为100次(次数不宜过多,过多会增加CPU负担),在执行循环之前,首先通过调用startTime=System.currentTime()函数来对起始时间startTime进行赋值操作。每次循环计算后判断count是否等于100,如果不等于100就执行下一次循环计算,否则就通过调用endTime=System.currentTime()函数来获取该函数执行的结束时间。通过计算endTime-startTime得到一个最终的时间开销数据,即时间差值delT,然后我们通过return delT的方法将该值进行返回。
通过上述方法过程就可得到一个维度数据delT。然后,需要将该维度数据换成CPU的使用率。如果CPU当前负债非常轻,此时delT的值应该就越小,如果CPU当前负债非常重,此时delT的值应该就越大。基于这个映射关系,可通过一映射函数来将delT转换成CPU的使用率的评估值,具体的映射关系如下:Y=M/(delT*delT),其中delT为维度数据,(delT*delT)为对维度数据进行放大,M为调节系数(为一常数),Y为评估值。
通过delT*delT,可放大CPU的维度数据,这样可以降低delT单个数据的误差值。采用M除以(delT*delT)得到Y,其中M是一个调节系数常量,该调剂系数可以根据平台的不同来进行自定义设计,本方案中将调节系数设置为M=100。需要说明的是,调节系数的设计是有一定的技巧性的,调节系数设置过大可能会导致后续Y值的动态计算次数增多,调剂系数过小可能会导致Y值的动态计算方案失效,所以该调节系数需要根据平台特性进行相应设计,故本示例中设置为100。
在第一次计算得到Y1的值后,接下来需要判断Y1是否大于1,如果大于1就对Y1除以10得到Y2,再次对Y2判定是否大于1如果大于1在对Y2除以10得到Y3,以此类推直到YN的取值在0-1之间,包括1,此时获取到的最终的YN(N为1、2、3、4···)就是我们所需的CPU的使用率的评估值,该值就能够抽象的描述整个CPU的使用率。通过极小性能的开销,避免了传统方案中对CPU的使用率的复杂的解析算法快速的获取到CPU的使用率的评估值数据来抽象的描述CPU的使用率,能够在失真少的情况下高效快速的获取CPU的使用率数据信息。
为了在CPU的使用率较高的时候及时进行使用率预警,可将上述方案设置到一个周期性的定时器中,通过定时器周期性的触发来动态周期性的获取当前系统的CPU的使用率的评估值,检测到CPU的使用率的评估值大于使用阈值N(本方案中举例N=70%)的时候我们认为要触发预警系统,预警系统就需要触发预警总线来实现对性能的预警。
具体触发预警的设计方法如下:
首先设计一条预警协议来传递预警信息,具体的预警协议设计如下所述:
Interface ICallPolice{
Fun onPolice(cpuUsage:Int,systeInfo:SInfo)
}
该协议中我们定义的协议名称是ICallPolice,该协议中有一个协议方法onPolice,该协议方法的返回值是void类型,协议函数中包含两个协议参数信息,第一个是int类型的参数cpuUsage表示当前CPU的使用率,第二个参数是SInfo类型的systeInfo参数信息,其中Sinfo类型是我们自定义的一个数据类型,具体的类型定义如下所述:
Figure BDA0002198059930000111
Figure BDA0002198059930000121
SInfo中主要包含了一些基本信息,其中主要列出了上述三个基本型,用于对当前系统环境的描述信息进行一个抽象设计。
定义一个上述协议的实现类CallPoliceImpl然后通过继承ICallPolice并复写onPolice的方法来实现具体的业务功能,具体的方法如下所述:
Figure BDA0002198059930000122
接下来需要描述CallPoliceImpl类中onPolice方法的具体业务实现逻辑。
首先构建一个File类对象,具体的构建方法是通过调用varfile:File=File(“/sdcard/info.txt”),然后将cpuUsage和systeInfo组装成一个新的包裹对象Wrapper,具体是通过调用Wrapper对象中的setCpuUsage(cpuUsage)方法来将数据存进去,调用setSInfo方法将数据存储进Wrapper对象中。其中Wrapper也是设计的一个类对象,该类对象中包含了cpuUsage对象和systeInfo对象并实现了相应的get和set方法。通过上述方式就得到了一个Wrapper类型的对象wrapper,然后通过Gson.toString(wrapper)方法将wrapper对象转成一个string类型的对象str,然后在将file.write(str)方法将信息写入到文件中去。
当触发预警后,首先从设计的CacheCenter缓存中心中去取ICallPolice类型的对象,具体的取值方法是CacheCenter.get(“ICallPolice”)来获取得一个Any类型的对象,接下来我们需要判定Any类型的对象是不是一个ICallPolice类型的独享,如果是的我们就通过强制类型转换的方式将该对象进行转换,转换方法是CacheCenter.get(“ICallPolice”)as ICallPolice。然后调用ICallPolice对象中的onPolice方法来将数据信息存储到文件中去,最后通过HTTP协议将文件进行上报即可,接下来我们还需要简单介绍一下CacheCenter中是如何对ICallPolice对象进行管理的。
CacheCenter中设计了一个键值对集合来缓存数据,然后通过cache(key:String,Obj:Any)的函数来存储数据,通过get(key:String)函数来获取信息。存储的时候我们传入的是cache(“ICallPolice”,CallPoliceImpl())参数信息,其中“ICallPolice”是键,值是CallPoliceImpl()对象,由于CallPoliceImpl实现了ICallPolice协议,因此也是一个ICallPolice对象。我们取的时候取到的其实是CallPoliceImpl对象,然后强转成ICallPolice协议对象,来调用其中的onPolice方法完成最终的预警处理逻辑。
综上所述,在本发明实施例提供的一种CPU使用率监控方法,通过采用一预定义的目标变量在预设次数内进行循环计算;然后对循环计算的起始时间(即首次计算的时间)以及循环计算的结束时间(即末次计算的时间)进行记录。然后根据所述起始时间与所述结束时间的时间差值,得到CPU的维度数据;该维度数据是根据对目标变量循环计算所花费的时长来获得,可以表征CPU的繁忙程度;而对目标变量的循环计算可以为简单的计算,不需要使用top命令,更不需要对CPU的数据文件进行解析等操作,大大节省了CPU使用率的采集开销,节省了CPU资源。最后,通过一调节系数将维度数据转化为CPU的使用率,就可最大程度的还原CPU的真实使用率情况。因此,通过本发明来对CPU的使用率进行监控,可节省获取CPU使用率时的采集开销,节省CPU资源,提高了系统整体性能。
第二实施例
请参阅图2,在本实施例中,提供一种CPU使用率监控装置300,所述装置300包括:
循环计算模块301,用于采用一预定义的目标变量在预设次数内进行循环计算;
起始时间获取模块302,用于调用System.currentTime()函数获取所述目标变量进行首次循环计算时的起始时间;
结束时间获取模块303,用于判断所述目标变量的循环计算次数是否达到所述预设次数的末次;若是,则调用System.currentTime()函数获取所述目标变量进行末次循环计算时的结束时间;
维度数据获取模块304,用于根据所述起始时间与所述结束时间的时间差值,获得CPU的维度数据;其中,所述维度数据表示所述CPU的繁忙程度;
评估值获取模块305,用于基于等式Y=M/(delT*delT),获得所述CPU使用率的评估值;其中,Y为评估值,所述评估值用于评估所述CPU使用率的大小,M为调节系数,delT为维度数据;
使用率获取模块306,用于根据所述评估值,获得所述CPU的使用率。
作为一种可选的实施方式,所述循环计算模块301具体用于:
对所述目标变量初始化为0;在所述预设次数内,对所述目标变量执行for循环,其中每次循环对所述目标变量进行加一。
作为一种可选的实施方式,所述结束时间获取模块303,具体用于:
判断所述目标变量的值是否达到最大预设次数,若是则判断所述目标变量的当前计算次数为所述预设次数的末次。
作为一种可选的实施方式,所述使用率获取模块,具体用于:
判断所述评估值是否大于1;若所述评估值不大于1,则将所述评估值作为表征所述CPU的使用率的值;若所述评估值大于1,则对所述评估值进行除以10的运算直至首次获得小于1的调整值;其中,所述调整值为表征所述CPU的使用率的值。
作为一种可选的实施方式,M的取值为100。
作为一种可选的实施方式,还包括预警模块,用于在根据所述维度数据与预设的调节系数,获得所述CPU的使用率之后;周期性的判断所述CPU的使用率是否大于预设的使用阈值;若当前周期内所述CPU的使用率大于所述使用阈值,则向用户进行预警以避免所述CPU的使用率过大影响采集开销,所述采集开销为采集所述CPU的使用率时花费的开销。
作为一种可选的实施方式,所述预警模块还用于:
定义一预警协议;所述预警协议包括一预警函数,所述预警函数的返回值为void类型,所述预警函数用于存储所述CPU的使用率以及用于描述当前系统环境的基本参数;定义所述预警协议的实现类;若所述CPU的使用率大于所述使用阈值,则通过所述预警协议的实现类对所述预警协议进行继承并复写所述预警函数,以向用户进行预警。
作为一种可选的实施方式,所述预警模块还用于:
若所述CPU的使用率大于所述使用阈值,则采用CacheCenter.get()从缓存中心获取唯一的Any类型的对象;将所述Any类型的对象转换为所述预警协议的对象;基于所述预警协议的对象,调用setCpuUsage()方法以及setSInfo方法,将所述CPU的使用率以及所述基本参数组装为一个包裹对象;调用Gson.toString()方法将所述包裹对象转化为string类型的对象str,并将所述对象str存储到预设的File类对象中;通过HTTP协议将存储有所述对象str的File类对象进行上报以向用户进行预警。
需要说明的是,本发明实施例所提供的CPU使用率监控装置300,其具体实现及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
第三实施例
基于同一发明构思,本发明第三实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如下步骤:
采用一预定义的目标变量在预设次数内进行循环计算;调用System.currentTime()函数获取所述目标变量进行首次循环计算时的起始时间;判断所述目标变量的循环计算次数是否达到所述预设次数的末次;若是,则调用System.currentTime()函数获取所述目标变量进行末次循环计算时的结束时间;根据所述起始时间与所述结束时间的时间差值,获得CPU的维度数据;其中,所述维度数据表示所述CPU的繁忙程度;基于等式Y=M/(delT*delT),获得所述CPU使用率的评估值;其中,Y为评估值,所述评估值用于评估所述CPU使用率的大小,M为调节系数,delT为维度数据;根据所述评估值,获得所述CPU的使用率。
本发明提供的装置集成的功能模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例的方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的存储介质、装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (10)

1.一种CPU使用率监控方法,其特征在于,所述方法包括:
采用一预定义的目标变量在预设次数内进行循环计算;
调用System.currentTime()函数获取所述目标变量进行首次循环计算时的起始时间;
判断所述目标变量的循环计算次数是否达到所述预设次数的末次;若是,则调用System.currentTime()函数获取所述目标变量进行末次循环计算时的结束时间;
根据所述起始时间与所述结束时间的时间差值,获得CPU的维度数据;其中,所述维度数据表示所述CPU的繁忙程度;
基于等式Y=M/(delT*delT),获得所述CPU使用率的评估值;其中,Y为评估值,所述评估值用于评估所述CPU使用率的大小,M为调节系数,delT为维度数据;
根据所述评估值,获得所述CPU的使用率。
2.根据权利要求1所述的方法,其特征在于,所述采用一预定义的目标变量在预设次数内进行循环计算,包括:
对所述目标变量初始化为0;
在所述预设次数内,对所述目标变量执行for循环,其中每次循环对所述目标变量进行加一。
3.根据权利要求2所述的方法,其特征在于,所述判断所述目标变量的循环计算次数是否达到所述预设次数的末次,包括:
判断所述目标变量的值是否达到最大预设次数,若是则判断所述目标变量的当前计算次数为所述预设次数的末次。
4.根据权利要求1所述的方法,其特征在于,所述根据所述评估值,获得所述CPU的使用率,包括:
判断所述评估值是否大于1;
若所述评估值不大于1,则将所述评估值作为表征所述CPU的使用率的值;
若所述评估值大于1,则对所述评估值进行除以10的运算直至首次获得小于1的调整值;其中,所述调整值为表征所述CPU的使用率的值。
5.根据权利要求1所述的方法,其特征在于,M的取值为100。
6.根据权利要求1所述的方法,其特征在于,所述根据所述维度数据与预设的调节系数,获得所述CPU的使用率之后,还包括:
周期性的判断所述CPU的使用率是否大于预设的使用阈值;
若当前周期内所述CPU的使用率大于所述使用阈值,则向用户进行预警以避免所述CPU的使用率过大影响采集开销,所述采集开销为采集所述CPU的使用率时花费的开销。
7.根据权利要求6所述的方法,其特征在于,所述若当前周期内所述CPU的使用率大于所述使用阈值,则向用户进行预警,包括:
定义一预警协议;所述预警协议包括一预警函数,所述预警函数的返回值为void类型,所述预警函数用于存储所述CPU的使用率以及用于描述当前系统环境的基本参数;
定义所述预警协议的实现类;
若所述CPU的使用率大于所述使用阈值,则通过所述预警协议的实现类对所述预警协议进行继承并复写所述预警函数,以向用户进行预警。
8.根据权利要求7所述的方法,其特征在于,所述若所述CPU的使用率大于所述使用阈值,则通过所述预警协议的实现类对所述预警协议进行继承并复写所述预警函数,以向用户进行预警,包括:
若所述CPU的使用率大于所述使用阈值,则采用CacheCenter.get()从缓存中心获取唯一的Any类型的对象;
将所述Any类型的对象转换为所述预警协议的对象;
基于所述预警协议的对象,调用setCpuUsage()方法以及setSInfo方法,将所述CPU的使用率以及所述基本参数组装为一个包裹对象;
调用Gson.toString()方法将所述包裹对象转化为string类型的对象str,并将所述对象str存储到预设的File类对象中;
通过HTTP协议将存储有所述对象str的File类对象进行上报以向用户进行预警。
9.一种CPU使用率监控装置,其特征在于,所述装置包括:
循环计算模块,用于采用一预定义的目标变量在预设次数内进行循环计算;
起始时间获取模块,用于调用System.currentTime()函数获取所述目标变量进行首次循环计算时的起始时间;
结束时间获取模块,用于判断所述目标变量的循环计算次数是否达到所述预设次数的末次;若是,则调用System.currentTime()函数获取所述目标变量进行末次循环计算时的结束时间;
维度数据获取模块,用于根据所述起始时间与所述结束时间的时间差值,获得CPU的维度数据;其中,所述维度数据表示所述CPU的繁忙程度;
评估值获取模块,用于基于等式Y=M/(delT*delT),获得所述CPU使用率的评估值;其中,Y为评估值,所述评估值用于评估所述CPU使用率的大小,M为调节系数,delT为维度数据;
使用率获取模块,用于根据所述评估值,获得所述CPU的使用率。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-8中任一项所述方法的步骤。
CN201910854938.2A 2019-09-10 2019-09-10 一种cpu使用率监控方法及装置 Active CN112559276B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910854938.2A CN112559276B (zh) 2019-09-10 2019-09-10 一种cpu使用率监控方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910854938.2A CN112559276B (zh) 2019-09-10 2019-09-10 一种cpu使用率监控方法及装置

Publications (2)

Publication Number Publication Date
CN112559276A CN112559276A (zh) 2021-03-26
CN112559276B true CN112559276B (zh) 2022-05-13

Family

ID=75029274

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910854938.2A Active CN112559276B (zh) 2019-09-10 2019-09-10 一种cpu使用率监控方法及装置

Country Status (1)

Country Link
CN (1) CN112559276B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118567914A (zh) * 2023-02-22 2024-08-30 中兴通讯股份有限公司 中央处理器的使用率的预测方法、装置及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5797115A (en) * 1995-08-24 1998-08-18 Fuller; Billy Measuring direct and indirect usage of a central processing unit
CN1664789A (zh) * 2004-03-04 2005-09-07 中兴通讯股份有限公司 一种检测实时操作系统cpu占用率的方法
CN107977302A (zh) * 2017-11-24 2018-05-01 杭州迪普科技股份有限公司 一种cpu使用率输出方法及装置
CN108804292A (zh) * 2018-06-20 2018-11-13 郑州云海信息技术有限公司 一种用于Linux的CPU压力测试监控方法
CN109684167A (zh) * 2018-12-06 2019-04-26 北京城市网邻信息技术有限公司 应用程序cpu使用率的计算方法、装置、存储介质及终端

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5797115A (en) * 1995-08-24 1998-08-18 Fuller; Billy Measuring direct and indirect usage of a central processing unit
CN1664789A (zh) * 2004-03-04 2005-09-07 中兴通讯股份有限公司 一种检测实时操作系统cpu占用率的方法
CN107977302A (zh) * 2017-11-24 2018-05-01 杭州迪普科技股份有限公司 一种cpu使用率输出方法及装置
CN108804292A (zh) * 2018-06-20 2018-11-13 郑州云海信息技术有限公司 一种用于Linux的CPU压力测试监控方法
CN109684167A (zh) * 2018-12-06 2019-04-26 北京城市网邻信息技术有限公司 应用程序cpu使用率的计算方法、装置、存储介质及终端

Also Published As

Publication number Publication date
CN112559276A (zh) 2021-03-26

Similar Documents

Publication Publication Date Title
WO2021036450A1 (zh) 一种模拟器检测方法及系统
US9367435B2 (en) Integration testing method and system for web services
JP6991983B2 (ja) 機械学習システムをトレーニングする方法及びシステム
JP7282195B2 (ja) 組み込みソフトウェアアプリケーションのための機械学習ベースの異常検出
CN108205469B (zh) 一种基于MapReduce的资源分配方法及服务器
KR102438527B1 (ko) Url과 연관된 콘텐츠와 호스트 데이터를 고려한 악성 url 예측 방법 및 이를 구현하기 위한 장치
CN109684167A (zh) 应用程序cpu使用率的计算方法、装置、存储介质及终端
CN110955438A (zh) 一种小程序的性能监控方法、装置、设备及存储介质
CN112559276B (zh) 一种cpu使用率监控方法及装置
CN113495728B (zh) 依赖关系确定方法、装置、电子设备及介质
CN105653271B (zh) 行为树的静态解析、执行以及优化方法和装置
JP4291306B2 (ja) 数値計算ライブラリのチューニングパラメータ算出プログラム及び方法
CN110580220A (zh) 测量代码段执行时间的方法及终端设备
CN103049069B (zh) 终端电池温度显示方法和装置以及终端
CN111159038A (zh) 一种模拟cpu负载的方法及电子设备
CN116302794A (zh) 一种基于人工智能的海量数据安全监控方法及系统
CN108345791B (zh) 处理器安全检测方法、系统及检测装置
CN112631577B (zh) 一种模型的调度方法、模型调度器以及模型安全测试平台
JP2008250838A (ja) ソフトウェア生成装置、方法、およびプログラム
CN114491677A (zh) 智能终端的硬件性能评测方法及装置、存储介质、终端
CN111756682B (zh) 游戏数据的确定方法、获取方法及其装置
CN115329250B (zh) 基于dg处理数据的方法、装置、设备及可读存储介质
CN113704687A (zh) 一种张量计算运行方法、装置及运算系统
CN111352825A (zh) 数据接口的测试方法、装置及服务器
JPWO2013129061A1 (ja) 同時接続数制御システム、同時接続数制御サーバ、同時接続数制御方法および同時接続数制御プログラム

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