linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Процессы и ресурсы/swap

kb/processes ── Процессы и ресурсы ── beginner

Swap - когда RAM кончается

Swap - место на диске, куда ядро вытесняет редко используемые страницы памяти, когда RAM нужнее. Раздел или файл. Управляется `vm.swappiness` (0-100).

view as markdownaka: swapfile, swappiness, paging

Что это

Когда RAM кончается, у ядра есть выбор:

  1. Выкинуть clean страницы page cache (можно перечитать с диска)
  2. Записать грязные anonymous-страницы (heap процесса) на диск и освободить RAM - это swap-out
  3. Если ни то ни другое не дало места → oom-killer

Swap не делает систему быстрее. Он делает её возможной в условиях «RAM кончилась, но работа должна продолжаться».

Swap partition vs swap file

Раньше - отдельный раздел. Сейчас на современных дистро - обычно файл:

bash
# Создать swap-файл 4 GB
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile                # права обязательно жёсткие
sudo mkswap /swapfile
sudo swapon /swapfile
# Постоянно - в /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Раздел:

bash
sudo mkswap /dev/sdb2
sudo swapon /dev/sdb2
# fstab: UUID=... none swap sw 0 0

Просмотр

bash
swapon                                  # активные swap-устройства/файлы
cat /proc/swaps                         # то же из ядра
free -h                                  # колонки used/free/total для swap
vmstat 1                                # si/so = swap-in/out в KB/s
cat /proc/meminfo | grep -i swap

Формат swapon:

NAME       TYPE       SIZE  USED  PRIO
/swapfile  file       4G    300M  -2
/dev/sdb2  partition  8G    1.2G  -3

PRIO - приоритет; чем выше число, тем раньше используется. Несколько swap'ов с одинаковым PRIO работают как RAID-0.

vm.swappiness

bash
cat /proc/sys/vm/swappiness     # default 60 (на ноуте) или 30 (на сервере)
  • 0 - почти не свопить anonymous-страницы; жди пока кончится
  • 60 - баланс (default desktop)
  • 100 - свопь агрессивно

На прод-серверах БД часто ставят 1-10 - чтобы heap БД не уходил в swap (БД своим bufferpool управляет лучше ядра).

bash
echo 'vm.swappiness = 10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system

Когда swap полезен

  • Burst-память при импорте - раз в неделю прилетает 10GB job, RAM 8GB, но job медленный и редкий → пусть свопится
  • Hibernate (suspend-to-disk) - нужен swap >= размер RAM
  • Безопасность от OOM-kill - лучше медленно, чем убить критичный процесс
  • Виртуалки - гость сам не знает что ему дают; swap страховка

Когда swap ВРЕДЕН

  • Latency-sensitive сервисы - подкачка страницы стоит миллисекунды, SLA рушится. Лучше OOM-kill и redeploy.
  • БД - управляются bufferpool'ом, ядро не знает что важно
  • Контейнерные ноды k8s - k8s рассчитывает на «нет swap'а»; с swap'ом метрики и QoS ломаются. До k8s 1.22 swap обязательно отключать.

Thrashing

Если процесс активно использует больше памяти чем RAM, ядро бесконечно свопит туда-обратно. Признаки:

  • vmstat 1 - si/so высокие (десятки тысяч KB/s)
  • top - процессы в state D, load-average зашкаливает
  • iowait 90%+
  • Система фактически не отвечает

Лечение: убить процесс, отключить swap, поставить лимит cgroups, или добавить RAM.

Отключение

bash
sudo swapoff -a                          # все swap'ы
sudo swapoff /swapfile                    # конкретный
sudo rm /swapfile                         # если файл, удалить
# И убрать строку из /etc/fstab

swapoff может занять минуты - нужно сначала вернуть всё в RAM.

zram - swap в сжатой памяти

Альтернатива: вместо swap'а на диск - сжатый блок RAM. Меньше IOPS на диск, быстрее, но занимает RAM:

bash
sudo modprobe zram
echo lz4 | sudo tee /sys/block/zram0/comp_algorithm
echo 2G | sudo tee /sys/block/zram0/disksize
sudo mkswap /dev/zram0
sudo swapon -p 100 /dev/zram0           # высокий приоритет - используется первым

Default на Fedora, ChromeOS, многих embedded дистро.

§ команды

bash
swapon

Активные swap-устройства с размером и приоритетом

bash
free -h

RAM + swap usage - быстрая проверка

bash
vmstat 1 5

5 секунд паттерна si/so - реально ли свопит сейчас

bash
sudo sysctl -w vm.swappiness=10

Снизить агрессивность swap'а - типично для серверов с БД

bash
sudo swapoff -a && sudo swapon -a

Полная очистка swap'а - заставляет ядро вернуть всё в RAM

§ см. также

  • virtual-memoryVirtual memory - виртуальные адреса, page tablesКаждый процесс видит свой 64-битный virtual address space. MMU переводит виртуальные адреса в физические через page tables. Это основа изоляции и mmap.
  • oom-killerOOM killerOOM killer - механизм ядра, который выбирает и завершает процесс когда система упирается в лимит памяти. В контейнерах работает per-cgroup.
  • page-cachePage cache - диск в памятиPage cache - кеш в RAM для содержимого файлов. Любое чтение/запись ФС идёт через него. «Used» в free выглядит большим, но page cache - это availabe.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки