Сравните это
# free -m total used free shared buffers cached Mem: 72363 68035 4328 0 522 66294 -/+ buffers/cache: 1218 71145 Swap: 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: swap 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:
Почему free показывает 66294MB для «cache», а snmp показывает около 44238MB для «memCached»? Разве это не должно быть таким же?
Глядя на MIB, я вижу, что «memCached» - это «физическая или виртуальная» память, используемая для кэширования. (Не говорите мне, что он помещает кеш диска в своп) ^^
Цель состоит в том, чтобы узнать реальную свободную физическую память (т.е. здесь 71145, как показано free
) через snmp.
Больше информации
# cat /proc/meminfo MemTotal: 74100516 kB MemFree: 4422092 kB Buffers: 542168 kB Cached: 44239460 kB SwapCached: 4 kB Active: 16455504 kB Inactive: 28707308 kB SwapTotal: 12586888 kB SwapFree: 12586784 kB Dirty: 2536 kB Writeback: 0 kB AnonPages: 381088 kB Mapped: 252132 kB Slab: 23961488 kB SReclaimable: 23648768 kB SUnreclaim: 312720 kB PageTables: 7812 kB NFS_Unstable: 0 kB Bounce: 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)
:
тайник Память, используемая кешем страниц и блоками (Cached и Slab в / proc / meminfo)
free
включает размещение блоков в кеше; UCD-SNMP-MIB - нет. Если вы добавите распределение перекрытий, вы получите:
UCD-SNMP-MIB::memCached.0 + slab = 44238560 + 23961488
= 68200048 KB
что намного ближе к тому, что free
сообщил (67885056 КБ).
Что касается получения реальной свободной физической памяти, лучшее, что вы можете сделать с помощью этой MIB, - это получить приблизительную оценку:
totFree = memAvailReal.0 + memBuffer.0 + memCached.0
= 4429580 + 534804 + 44238560
= 49202944 KB
что по-прежнему значительно ниже, чем значение свободных + буферов / кеша, о которых сообщает free
.
Обратите внимание, что HOST-RESOURCES-MIB ничем не лучше; видеть мой ответ на аналогичный вопрос о переполнении стека.
Новые ядра на самом деле обеспечивают для этого лучшую метрику. Снова из free(1)
страница руководства:
доступный
Оценка того, сколько памяти доступно для запуска новых приложений без подкачки. В отличие от данных, предоставляемых кешем или свободными полями, это поле учитывает кеш страницы, а также то, что не все восстанавливаемые блоки памяти будут освобождены из-за использования элементов (MemAvailable в / proc / meminfo, доступно в ядрах 3.14, эмулировано в ядра 2.6.27+, в остальном то же, что и бесплатные)
Это значение будет ниже, чем общее количество свободных + буферов / кеша, и будет лучшим показателем доступной памяти, но я не вижу его в вашем /proc/meminfo
и я не нашел MIB, который его использует.