SNMP - CPU 处理器负载值未反映实际情况

SNMP - CPU 处理器负载值未反映实际情况

尝试在我的服务器上绘制 CPU 负载,使用以下硬件:ProLiant DL360p Gen8(在 ProLiant DL360 G7 上的行为相同)。

该机器正在运行VMWare ESXi5.1

为了创建 CPU 峰值,我运行了dd if=/dev/zero of=/dev/null,并且我知道 CPU 已超载,因为我可以在 vCenter 上显示的图表中看到相关的峰值。

在此处输入图片描述

但是,运行这个 snmpwalk:

snmpwalk -v 1 -c ******** 192.168.MY_IP  1.3.6.1.2.1.25.3.3.1.2

显示以下结果:

iso.3.6.1.2.1.25.3.3.1.2.1 = INTEGER: 3
iso.3.6.1.2.1.25.3.3.1.2.2 = INTEGER: 2
iso.3.6.1.2.1.25.3.3.1.2.3 = INTEGER: 2
iso.3.6.1.2.1.25.3.3.1.2.4 = INTEGER: 3

我是不是没有查看正确的 MIB?我应该将它们乘以一个常数吗?

顺便说一句,使用 HP Agentless Monitoring,我能够获得一些 CPU 统计数据,但不是我想要的,至少我费尽心思也没找到这些 MIB

答案1

尝试使用强调效用请在 Linux 中生成负载。它非常精细,比你正在做的事情更有意义。

我看到您在 4-CPU 虚拟机上生成单线程 I/O 负载。您从 vSphere 客户端粘贴的 CPU 图表显示负载为 25%,因为您只占用了其中一个分配给虚拟机的 CPU。

下载压力(适用于大多数 Linux 发行版)并尝试一些特定的参数……

例如,只需在 4-CPU 虚拟机上运行以下命令:

# stress -c 4
stress: info: [594013] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd

产量……

在此处输入图片描述

答案2

Vmware 不会收集这些信息,而且它确实没有很好的方法来收集这些信息。问题是它无法知道你什么时候会询问——所以为了使它工作,它必须总是计算过去 60 秒的平均就绪时间。由于您可能现在询问,然后一秒钟后询问,因此它必须正确计算 40 秒前的 CPU 时间,以用于两个间隔。这确实是一件丑陋而复杂的事情。

支持这一点会增加很高的成本,因为 SNMP 代理必须不断探测 CPU 使用率并更新同时运行的多个间隔。

相关内容