Значения памяти SNMP не совпадают с `free`
Сравните это
# free -m общее количество использованных свободных общих буферов в кеше Память: 72363 68035 4328 0 522 66294 -/+ буферы / кэш: 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: swap UCD-SNMP-MIB:: memTotalSwap.0 = INTEGER: 12586888 кБ UCD-SNMP-MIB::memAvailSwap.0 = INTEGER: 12586784 кБ UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 74100516 КБ UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 4429580 КБ UCD-SNMP-MIB::memTotalFree.0 = INTEGER: 17016364 кБ UCD-SNMP-MIB::memMinimumSwap.0 = INTEGER: 16000 кБ UCD-SNMP-MIB::memBuffer.0 = INTEGER: 534804 кБ UCD-SNMP-MIB::memCached.0 = INTEGER: 44238560 кБ UCD-SNMP-MIB::memSwapError.0 = INTEGER: noError(0) UCD-SNMP-MIB::memSwapErrorMsg.0 = STRING:
Почему free показывает 66294MB для "кеша", а snmp показывает около 44238MB для "memCached"? Разве это не должно быть то же самое?
Глядя на MIB, я вижу, что memCached - это "физическая или виртуальная" память, используемая для кэширования. (Не говорите мне, что это помещает дисковый кеш в swap) ^^
Цель состоит в том, чтобы узнать реальную свободную физическую память (т.е. здесь 71145, как показано free
) через snmp.
Больше информации
# cat /proc/meminfo MemTotal: 74100516 кБ MemFree: 4422092 кБ Буферы: 542168 кБ Кэшированные: 44239460 КБ Свопинговые: 4 КБ Активные: 16455504 КБ Неактивные: 28707308 КБ SwapTotal: 12586888 КБ SwapFree: 1267: 067БиСф: 0: 068: 0 0 0 0 0 0 0 0 0 0 5 5 5 5 5 5 0 5 5 0 5 5 5 5 0 5 5 5 5 0 5 5 0 5 5 5 0 5 5 5 5 0 0 0 5 5 0 0 5 8 8 КБ. AnonPages: 381088 кБ Сопоставлено: 252132 кБ Плита: 23961488 кБ 264124 КБ VmallocChunk: 34359474191 КБ HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Огромный размер страницы: 2048 КБ DirectMap4k: 7936 КБ DirectMap2M: 75481088 КБ
1 ответ
Из справочной страницы для 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 + buffers/cache, сообщаемое free
,
Обратите внимание, что HOST-RESOURCES-MIB не лучше; см. мой ответ на аналогичный вопрос о переполнении стека.
Более новые ядра фактически обеспечивают лучший показатель для этого. Опять из free(1)
страница руководства:
имеется в наличии
Оценка того, сколько памяти доступно для запуска новых приложений, без подкачки. В отличие от данных, предоставляемых кешем или свободными полями, это поле учитывает кеш страниц, а также то, что не все восстанавливаемые блоки памяти будут возвращаться из-за используемых элементов (MemAvailable в /proc/meminfo, доступно в ядрах 3.14, эмулируется в ядра 2.6.27+, в остальном такие же как и бесплатные)
Это значение будет меньше, чем общее количество свободных + буферов / кеш, и будет лучшим показателем доступной памяти, но я не вижу его в вашем /proc/meminfo
и я не нашел MIB, который использует его.