如何根据 SNMP 中的原始 CPU 滴答计算 CPU 百分比

如何根据 SNMP 中的原始 CPU 滴答计算 CPU 百分比

根据http://net-snmp.sourceforge.net/docs/mibs/ucdavis.html#scalar_notcurrent ssCpuUser、、、等已被弃用,取而代之的是原始变体(ssCpuSystem、等)。ssCpuIdlessCpuRawUser

前面的值(不包括 nice、wait、kernel、interrupt 等内容)返回一个百分比值:

过去一分钟内计算出的处理用户级代码所花费的 CPU 时间百分比。

该对象已被弃用,取而代之的是“ ssCpuRawUser(50)”,它可用于计算相同的指标,但适用于任何所需的时间段。

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

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

在多处理器系统上,' ssCpuRaw*'计数器是所有 CPU 的累积计数器,因此它们的总和通常为 N*100(对于 N 个处理器)。

我的问题是:如何将刻度数转换为百分比?

也就是说,你怎么知道每秒有多少个滴答声(它是通常— 这意味着并非总是 — 1/100 秒,要么意味着每 100 秒出现 1 次,要么意味着一个刻度代表 1/100 秒)。

我想你还需要知道有多少个 CPU或者您需要获取所有 CPU 值,然后将它们全部加在一起。我似乎找不到 MIB 来为您提供 CPU 数量的整数值,这使得前一种方式很不方便。后一种方式似乎不可靠,因为有些数字重叠(有时)。例如,ssCpuRawWait有以下警告:

此对象将不会在底层操作系统不测量此特定 CPU 指标的主机上实现。 这个时间也可能包含在“ ssCpuRawSystem(52)”计数器内。

非常感谢您的帮助。似乎到处都只是说 % 已被弃用,因为它可以被推导,但我没有找到任何地方显示执行此推导的官方标准方法。

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

我想要的最终信息是:用户、系统、空闲、良好(理想情况下是窃取,尽管这似乎没有标准的 MIB)“当前”(过去 1-60 秒内可能就足够了,最好使用较小的时间跨度)。

相关内容