SNMP内存值与“free”不匹配

比较一下

 #free -m
             caching总共使用的空闲共享缓冲区
 Mem:72363 68035 4328 0 522 66294
 -  / + buffers / cache:1218 71145
掉期:12291 0 12291

和这个:

 #snmpwalk -c public -v 2c localhost .1.3.6.1.4.1.2021.4
 UCD-SNMP-MIB :: memIndex.0 = INTEGER:0
 UCD-SNMP-MIB :: memErrorName.0 = STRING:交换
 UCD-SNMP-MIB :: memTotalSwap.0 = INTEGER:12586888 kB
 UCD-SNMP-MIB :: memAvailSwap.0 = INTEGER:12586784 kB
 UCD-SNMP-MIB :: memTotalReal.0 = INTEGER:74100516 kB
 UCD-SNMP-MIB :: memAvailReal.0 = INTEGER:4429580 kB
 UCD-SNMP-MIB :: memTotalFree.0 = INTEGER:17016364 kB
 UCD-SNMP-MIB :: memMinimumSwap.0 = INTEGER:16000 kB
 UCD-SNMP-MIB :: memBuffer.0 = INTEGER:534804 kB
 UCD-SNMP-MIB :: memCached.0 = INTEGER:44238560 kB
 UCD-SNMP-MIB :: memSwapError.0 = INTEGER:noError(0)
 UCD-SNMP-MIB :: memSwapErrorMsg.0 = STRING:

为什么免费显示“caching”66294MB,而snmp显示“memCached”约44238MB? 不应该是一样的吗?

查看MIB我看到“memCached”是用于caching的“物理或虚拟”内存。 (不要告诉我它把磁盘caching交换)^^

目标是通过snmp找出真正的自由物理内存(即在这里free显示的71145)。


更多信息

 #cat / proc / meminfo
 MemTotal:74100516 kB
 MemFree:4422092 kB
缓冲区:542168 kB
caching:44239460 kB
 SwapCached:4 kB
 Active:16455504 kB
不活动:28707308 kB
 SwapTotal:12586888 kB
 SwapFree:12586784 kB
脏:2536 kB
写回:0 kB
 AnonPages:381088 kB
映射:252132 kB
板:23961488 kB
 SReclaimable:23648768 kB
 SUnreclaim:312720 kB
 PageTables:7812 kB
 NFS_Unstable:0 kB
弹跳:0 kB
 WritebackTmp:0 kB
 CommitLimit:49637144 kB
 Committed_AS:4 kB
 VmallocTotal:34359738367 kB
 VmallocUsed:264124 kB
 VmallocChunk:34359474191 kB
 HugePages_Total:0
 HugePages_Free:0
 HugePages_Rsvd:0
 HugePages_Surp:0
 Hugepagesize:2048 kB
 DirectMap4k:7936 kB
 DirectMap2M:75481088 kB

free(1)的manpage free(1)

caching页面caching和平板使用的内存(Cached和Slab在/ proc / meminfo中)

free包括caching中的板块分配; UCD-SNMP-MIB不。 如果你添加板块分配,你会得到:

 UCD-SNMP-MIB::memCached.0 + slab = 44238560 + 23961488 = 68200048 KB 

这更接近free报道(67885056 KB)。


至于获得真正的自由物理内存,你可以做的最好的这个MIB是一个粗略的估计:

 totFree = memAvailReal.0 + memBuffer.0 + memCached.0 = 4429580 + 534804 + 44238560 = 49202944 KB 

这仍然大大低于免费报告的free + buffers / cache的值。

请注意,HOST-RESOURCES-MIB并不是最好的; 看到我堆栈溢出类似的问题的答案 。


较新的内核实际上为此提供了一个更好的指标。 再次从free(1)页:

可得到

估计有多less内存可用于启动新的应用程序,而不需要交换。 与caching或空闲字段提供的数据不同,此字段考虑了页面caching,并且由于项目正在使用(MemA可用于/ proc / meminfo中,所以内核3.14上提供了MemA,所以可能不会收回所有可回收的内存块内核2.6.27+,否则一样免费)

这个值将低于free + buffers / cache的总和,并且是可用内存的一个更好的标准,但是我没有在/proc/meminfo看到它,而且我还没有find使用它的MIB。