根据http://net-snmp.sourceforge.net/docs/mibs/ucdavis.html#scalar_notcurrent ssCpuUser , ssCpuSystem , ssCpuIdle等不赞成使用原始变体( ssCpuRawUser等)。
前者的值(不包括nice,wait,kernel,interrupt等等)返回一个百分比值:
在最后一分钟计算的用于处理用户级代码的CPU时间百分比。
此对象已被弃用,以支持'
ssCpuRawUser(50)',可用于计算相同的指标,但超过任何所需的时间段。
原始值返回CPU花费的“原始”滴答数量:
处理用户级代码花费的时间(通常为1 / 100s)。
在多处理器系统中,'
ssCpuRaw*'计数器在所有CPU上累计,所以它们的总和通常是N * 100(对于N个处理器)。
我的问题是:你如何把蜱的数量变成百分比?
也就是说,你怎么知道每秒钟有多less个嘀嗒声( 通常是 – 这意味着不总是 – 1 / 100s,这意味着每100秒钟1次,或者嘀嗒声代表1/100秒钟)。
我想你也需要知道有多less个CPU, 或者你需要获取所有CPU值来将它们加在一起。 我似乎无法find一个MIB给你一个CPU的整数值,这使得以前的路线尴尬。 后者的路线似乎不可靠,因为有些数字有时会重叠。 例如, ssCpuRawWait有以下警告:
此对象不会在底层操作系统不测量此特定CPU度量标准的主机上实施。 这个时间也可以包含在'
ssCpuRawSystem(52)'计数器中。
一些帮助,将不胜感激。 到处似乎只是说%已被弃用,因为它可以派生,但我没有find任何地方,显示官方标准的方式来执行此推导。
第二部分是这些“蜱”似乎是累积的,而不是一段时间。 如何在一段时间内采样值?
我想要的最终信息是:“用户,系统,闲置,漂亮(理想情况下,窃取,尽pipe目前似乎没有标准的MIB)”的百分比(在过去的1-60s可能就足够了,偏好较小的时间跨度)。
由于这些是绝对计数器,因此您必须定期检索这些指标,然后自己进行计算。 所以,如果你想要在下一分钟的数字,你将不得不得到的数字,等待一分钟,再次得到的数字。 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) 。
你问的是“你怎么知道它通常每秒有多less个蜱”,但正如你所看到的,你不需要知道这一点。
由于大多数 Linux发行版都有1/100的刻度,所以一个非常简单的方法是通过bash:
[myhost]# echo "scale=2; -1 * (`snmpget -Oqv -v2c -c public localhost .1.3.6.1.4.1.2021.11.54.0;sleep 5` - `snmpget -Oqv -v2c -c public localhost .1.3.6.1.4.1.2021.11.54.0` )/`snmpwalk -Oqu -v2c -c public localhost 1.3.6.1.2.1.25.3.3.1.2 | wc -l`/5" | bc | sed 's/^\./0./' | awk '{print "CPU_IOWAIT% " $1}' IOWAIT 0.07 [myhost]#
在RH / Centos和Ubuntu上,它运行的很好,精确的时间间隔为5秒…不止于此,snmp并不会增加Counter32,而且您一直得到零。
我已经完成循环,并与iostat -c 5 100 ,也用dd生成IO,并且运行良好。
你可以使用任何的ssCPUraw OIDs(从50到57的1.3.6.1.4.1.2021.11.5x,如果我没有错的话,在我的例子中我已经使用了ssCPURawWait,54)和1.3.6.1.2.1.25.3.3.1.2 | wc -l 1.3.6.1.2.1.25.3.3.1.2 | wc -l是获取核心的数量…
你需要把计数器/间隔的“delta”分开 – 就我而言,5 / – 这基本上就是脚本的function了!
除了已经用chutz写过的内容之外,对于剔的持续时间的提及可以在man 2 timesfindman 2 times :
每秒的时钟滴答数可以通过以下方式获得:
sysconf(_SC_CLK_TCK);
这是一个在C中调用的系统函数,也可以通过在shell中简单运行getconf CLK_TCK来获得。 这个数字是一个编译时常量,任何人都可以通过触摸源文件来改变,但是这将是一个非常罕见的事件 – 常见的Linux发行版都带有100的值。