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) също се показват в кеша, но не могат просто да се изхвърлят, защото съдържат данни без копие на диска. Затова голям кеш при малко налична памет често означава голям tmpfs или голям сегмент споделена памет.

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

Използването на swap не означава непременно проблем

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

swapon --show
vmstat 1 5

Открийте какво използва паметта

Подредете процесите по резидентна памет. RSS отчита страниците, споделени между процеси, във всеки от тях, така че стойностите на няколко процеса не могат просто да се съберат. Инструменти с PSS, като smem, дават по-точен сбор, ако са инсталирани.

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

Разпознайте истински недостиг

Признаците са малко налична памет, постоянно прехвърляне между RAM и 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 →

Биометрични отключване и сигурност →