CH-J Server Managerуправление серверами через SSH
Меню
Все руководства и статьи →

Как читать показатели RAM, кэша и swap на сервере Linux

Что означают столбцы free, почему высокая занятость памяти часто нормальна и какие признаки действительно указывают на нехватку памяти.

Смотрите на available, а не на free

Linux использует незанятую память как дисковый кэш, поэтому малый объём свободной памяти на исправном сервере — нормальное явление. Столбец available — это оценка ядром объёма памяти, который можно выделить новым задачам без обращения к swap. Следите именно за этим числом. Точный расчёт used зависит от версии утилиты, поэтому не сравнивайте его между разными системами.

free -h
grep -E 'MemAvailable|Shmem:|SReclaimable' /proc/meminfo

Что в кэше можно и нельзя освободить

Страничный кэш обычно можно освободить, когда приложениям требуется память. Разделяемая память и tmpfs (Shmem) тоже отображаются в cache, но просто отбросить их нельзя: они содержат данные, копии которых нет на диске. Поэтому большой кэш при малом объёме доступной памяти часто означает большой tmpfs или сегмент разделяемой памяти.

df -h -t tmpfs
sudo slabtop -o | head -15

Занятый swap сам по себе не проблема

Сервер может неделями без вреда хранить редко используемые страницы в swap. Проблемы вызывает непрерывное перемещение. Следите за столбцами si и so в vmstat: значения, постоянно превышающие ноль, означают активный обмен между памятью и swap, что указывает на реальную нехватку памяти.

swapon --show
vmstat 1 5

Найдите потребителей памяти

Отсортируйте процессы по резидентной памяти. RSS учитывает общие для нескольких процессов страницы у каждого из них, поэтому значения нескольких процессов нельзя просто сложить. Утилиты с поддержкой PSS, например smem, дают более корректную сумму, если они установлены.

ps -eo pid,user,rss,comm --sort=-rss | head -15

Как распознать реальную нехватку

Признаки — мало доступной памяти, постоянный обмен с swap и процессы, завершённые механизмом out-of-memory killer. Проверьте журнал ядра. Не запускайте drop_caches ради более красивых показателей: это лишь заставит сервер снова читать с диска и ничего не решит.

sudo journalctl -k --no-pager | grep -iE 'out of memory|oom-kill'

Память в CH-J Server Manager

System Monitor считывает эти значения по SSH. В Linux used определяется как MemTotal − MemFree − Buffers − Cached − SReclaimable, а available — как оценка ядра. Разделяемая память входит в Cached и не подлежит освобождению; категории на полосе не пересекаются. Поскольку формула отличается от используемой в некоторых версиях free, числа могут не совпадать в точности. Также отображается swap с историей использования. ZFS ARC отдельно не учитывается, поэтому на хостах с ZFS он считается занятой памятью.

Подробная документация

man: free →

man: proc_meminfo →

Биометрическое разблокирование и безопасность →