Перейти к содержанию

Глава 3: Анализ памяти — Глубокое погружение

Обзор

Память — самый непонятый ресурс. «90% памяти использовано» не значит, что серверу нужно больше RAM — скорее всего, это кэш.

Функции

Функция Что делает Источник
parseMeminfo() TotalBytes, FreeBytes, AvailableBytes, CachedBytes, Swap, Dirty, HugePages /proc/meminfo
parseVmstat() MajorFaults и MinorFaults /proc/vmstat
parsePSI() Давление памяти (some/full avg10/60) /proc/pressure/memory
parseBuddyinfo() Фрагментация по зонам и ордерам /proc/buddyinfo
parseNUMAStats() Per-NUMA-node память + numa_hit/miss /sys/devices/system/node/

Анализ эффективности кэша (Tier 2)

Метрики /proc/meminfo показывают только размер кэша, но не его эффективность.

cachestat

Показывает соотношение hits/misses для page cache. - Hits: Чтения из памяти (быстро). - Misses: Чтения с диска (медленно). - Полезно для: Понимания, нужно ли увеличивать RAM для базы данных. Если misses > 20% при активной нагрузке — кэш не справляется.

MemFree vs MemAvailable

  • MemFree: Полностью неиспользуемые страницы. Часто близко к нулю — и это нормально!
  • MemAvailable: Free + кэш + буферы, которые можно освободить. Это реально доступная память.

Правило: Используйте MemAvailable, а не MemFree, для планирования мощности.

Page Faults

  • Minor fault: Страница не в таблице страниц, но ЕСТЬ в памяти. Стоимость: ~1μs.
  • Major fault: Страницы нет в памяти, нужно читать с диска. Стоимость: ~1-10ms.

Sysctl параметры

Параметр По умолчанию Значение
vm.swappiness 60 Агрессивность подкачки (0=избегать, 100=агрессивно)
vm.overcommit_memory 0 0=эвристика, 1=всегда разрешать, 2=строгий учёт
vm.dirty_ratio 20 % RAM для грязных страниц до синхронной записи

Примеры диагностики

Здоровый сервер

Available = 66% от total. Нулевой swap. Нет давления.

Утечка памяти

Available < 2%, кэш вытеснен, swap активно используется, 125K major faults, PSI some=32%.


Далее: Глава 4 — Анализ дискового I/O