如何根据SNMP中的原始CPU标记计算CPU%

Modified on: Fri, 20 Sep 2019 20:20:03 +0800

根据http://net-snmp.sourceforge.net/ docs / mibs / ucdavis.html#scalar_notcurrent ssCpuUserssCpuSystemssCpuIdle等已弃用,有利于原始变体( ssCpuRawUser等。)

以前的值(不包括nice,wait,kernel,interrupt等等)返回了一个百分比值:

  

处理所花费的CPU时间百分比
  用户级代码,计算在最后一分钟。

  
  

此对象已被弃用,以支持
  'ssCpuRawUser(50)',可用于计算
  相同的指标,但在任何所需的时间段内。

原始值返回CPU花费的“原始”滴答数:

  

花费的'滴答'(通常为1/100秒)
  处理用户级代码。

  
  

在多处理器系统上,'ssCpuRaw*'
  计数器累积在所有CPU上,所以他们的
  sum通常为N * 100(对于N个处理器)。

我的问题是:你如何将滴答数转换为百分比?

也就是说,你怎么知道每秒有多少刻度(它通常是 - 这意味着并非总是 - 1 / 100s,这或者意味着每100秒1或者刻度代表1/100一秒钟。

我想你还需要知道有多少CPU 需要获取所有CPU值以将它们全部加在一起。我似乎无法找到一个MIB,它为你提供了一个CPU的整数值,这使得前一条路线变得尴尬。后一种方法似乎不可靠,因为有些数字重叠(有时)。例如,ssCpuRawWait具有以下警告:

  

此对象不会在其中的主机上实现
  底层操作系统无法衡量
  这个特定的CPU指标。 这次也可能
  包含在'ssCpuRawSystem(52)'计数器中。

一些帮助将不胜感激。到处似乎只是说%已被弃用,因为它可以派生,但我没有找到任何显示官方标准方法来执行此推导。

第二个组成部分是这些“滴答”似乎是累积的而不是一段时间。如何在一段时间内对值进行采样?

我想要的最终信息是:用户的百分比,系统,空闲,漂亮(并且理想地窃取,虽然似乎没有标准的MIB)“当前”(在过去的1-60秒可能足够,优先考虑较小的时间跨度。)

作者:Bo Jeanes

最佳答案

由于这些是绝对计数器,因此您必须定期检索这些计数器
度量,然后自己进行计算。所以,如果你想要数字超过
下一个分钟,你必须得到数字,等一下,然后得到
数字再次。 SNMP不会经常更新这些数字,因此您可以这样做
无论如何也无法获得这些。

一旦你有了原始用户,很好,系统,空闲,中断计数器就可以了
通过总结这些来获得滴答的总数。甚至MIB描述
他说,加上它们是可以的。

$ snmptranslate -Td .1.3.6.1.4.1.2021.11.52
UCD-SNMP-MIB::ssCpuRawSystem
...
    This object may sometimes be implemented as the
    combination of the 'ssCpuRawWait(54)' and
    'ssCpuRawKernel(55)' counters, so care must be
    taken when summing the overall raw counters."

然后,不管你进行测量后的时间长短了
该期间的总滴答数为total1 - total0。而闲置
百分比为(idle1-idle0)/(total1-total0)

你问“你怎么知道它通常每秒有多少滴答”但是
如你所见,你不需要知道。

作者:chutz

相关问答

添加新评论