Вики / Процессы
Память и swap
Как читать free, что такое swap и swappiness, OOM-killer.
free -h # память и swap
Ключевая колонка — available (сколько реально доступно приложениям), а не «free». Linux намеренно занимает свободную RAM под кэш (buff/cache) и отдаёт её при необходимости — высокий used из-за кэша это нормально.
swap — место на диске под вытеснение страниц памяти. Диск медленный, поэтому активный своп = тормоза, но он спасает от OOM.
free -h # итог по памяти/swap (смотри available!)
free -h -s2 # обновлять каждые 2с
cat /proc/meminfo # подробности (MemAvailable, Dirty, Slab…)
swapon --show # активные swap-устройства/файлы
vmstat 1 # колонки si/so — своп in/out (>0 = свопит)
ps aux --sort=-%mem | head # топ процессов по памяти (RSS)
smem -tk # память с учётом shared (точнее RSS; если установлен)
sudo cat /proc/<PID>/status | grep -E 'VmRSS|VmSwap' # память конкретного процесса
# добавить swap-файл (если своп кончился/его нет):
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# постоянно — строка в /etc/fstab: /swapfile none swap sw 0 0
sysctl vm.swappiness # склонность к свопу (0..100, по умолч. 60)
sudo sysctl vm.swappiness=10 # на серверах часто снижают (см. sysctl)
# постоянно: /etc/sysctl.d/99-swap.conf → vm.swappiness=10
sudo swapoff -a && sudo swapon -a # сбросить/перезалить swap
Сервер тормозит, swap растёт
Не хватает RAM — система свопит (vmstat 1 → si/so > 0). Найди пожирателя
(ps aux --sort=-%mem), добавь RAM/swap или ограничь сервис. Снизь vm.swappiness.
Процесс убит «из ниоткуда» (OOM)
OOM-killer при нехватке памяти. Подтверди: journalctl -k | grep -i oom /
dmesg | grep -i oom — там видно, кого и почему убили. Увеличь RAM/swap, ограничь
сервис через cgroups (MemoryMax=, см. cgroups-namespaces) или почини утечку.
Защитить процесс: oom_score_adj (choom).
available мало, хотя «free» вроде есть
Смотри именно available; «free» без кэша вводит в заблуждение. Кэш отдастся приложениям сам.
Память течёт у конкретного сервиса
/proc/PID/status (VmRSS) в динамике, smem. Ограничь через systemd MemoryMax=
и поймай рост (см. cgroups-namespaces).
Хочу освободить кэш (редко нужно)
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches — обычно не требуется (кэш и так
отдаётся под нагрузку).
free -h # смотри available, не free
vmstat 1 # si/so — активность свопа
swapon --show # активный swap
ps aux --sort=-%mem | head # топ по памяти
journalctl -k | grep -i oom # OOM-killer
# swap-файл: fallocate→chmod 600→mkswap→swapon (+ fstab) ; vm.swappiness=10
См. также
- Ядро и модули (lsmod, modprobe, dmesg) — Загрузка
- Мониторинг системы (load, top, vmstat) — Процессы
- Процессы (ps, top, kill, nice) — Процессы