![snmp hrSWRunPerfMem 的已用内存结果不正确](https://linux22.com/image/101481/snmp%20hrSWRunPerfMem%20%E7%9A%84%E5%B7%B2%E7%94%A8%E5%86%85%E5%AD%98%E7%BB%93%E6%9E%9C%E4%B8%8D%E6%AD%A3%E7%A1%AE.png)
我们有一些 Esxi 5.0 服务器(带有64GB每个 srvr 中的内存)和 snmp 已启用。根据我的研究,没有用于已用/可用内存 OID 的 oid,它只有hrMemorySize.0。因此,为了计算使用的内存,我尝试使用 bash 脚本来获取所有进程使用的内存,该脚本也进行数学计算。
USEDMEM=`snmpwalk -v2c -c PUBLIC -m "/cfg/mibs/HOST-RESOURCES-MIB" $HOST |grep hrSWRunPerfMem. | awk '{print $4}' | awk '{ sum += $1 } END { print sum }'`
RAW_MEM_BYTES=`echo "scale=3; $USEDMEM*1024" |bc -l`
RAW_MEM_GB=`echo "scale=3; $RAW_MEM_BYTES/1073741824" |bc -l`
echo $USEDMEM Kbits
echo $RAW_MEM_BYTES Bytes
echo $RAW_MEM_GB GB
结果...
66858364 Kbits
68462964736 Bytes
63.761 GB
但在 ESXI 客户端上我只能看到60GB用过的。如果我尝试使用上面的脚本收集 Windows 服务器的已用内存,也会发生同样的情况。这可能是一些计算论坛错误?我尝试使用 * 1000 进行计算,但结果仍然不正确。如果我尝试通过 hrSWRunPerfMem 计算已用内存,ESXI 和 Windows Server 也会发生这种情况。对于 Windows,我有许多其他方法来获取已用内存,因为有用于此目的的标准 snmp oid。但对于这个 esxi (5) 服务器,我一无所知:(
我怎样才能得到准确的结果?