Своп (Swap) — это область на диске, которую операционная система использует как расширение оперативной памяти. Когда RAM заполняется, ядро Linux перемещает («вытесняет») наименее используемые страницы памяти из RAM на своп-раздел или своп-файл, освобождая место для активных процессов.
Как работает своп
Ядро Linux управляет свопом через механизм виртуальной памяти. Параметр swappiness (0–100) определяет агрессивность вытеснения: значение 10 означает «свопировать только при крайней необходимости», 60 — системный дефолт, 100 — активное использование свопа.
Создание своп-файла на современных системах:
# Создать файл 2 ГБ
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# Сделать постоянным
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
Для уменьшения aggressiveness на сервере: sysctl vm.swappiness=10. Текущее использование своп: free -h или swapon --show.
Своп бывает двух видов: swap partition — выделенный раздел диска (быстрее, создаётся при установке ОС) и swap file — обычный файл на существующем разделе (гибче, можно добавить без переразметки).
История
Концепция свопа появилась в 1960-х в системах с виртуальной памятью. В Unix-системах своп стал стандартной практикой с 1970-х — выделенный своп-раздел позволял запускать больше процессов, чем влезало в физическую RAM. С удешевлением RAM роль свопа изменилась: теперь это страховка от OOM (Out of Memory), а не основная рабочая площадка.
На что обращать внимание
Высокое использование свопа — симптом нехватки оперативной памяти. Своп на HDD медленнее RAM в сотни раз, что приводит к «трешингу» — ситуации, когда система тратит больше времени на перемещение страниц, чем на работу. На SSD своп быстрее, но всё равно на порядок медленнее RAM и изнашивает диск.
Для VPS рекомендации по объёму свопа: при RAM до 2 ГБ — своп = объём RAM; 2–8 ГБ — 50% RAM; свыше 8 ГБ — 10–25% RAM. Мониторинг своп-активности через vmstat 1: если столбцы si (swap in) и so (swap out) постоянно ненулевые — пора расширять RAM или оптимизировать приложение.
Своп и производительность приложений
Интенсивное использование свопа резко ухудшает производительность приложений. Время доступа к данным в RAM — единицы наносекунд; на SSD NVMe — единицы микросекунд (в 1000 раз медленнее); на HDD — миллисекунды (в миллион раз медленнее). Когда приложение начинает активно свопировать — это «thrashing», система тратит больше времени на перемещение страниц, чем на полезную работу.
Для разных типов приложений рекомендации по свопу различаются. Базы данных (MySQL, PostgreSQL) критически зависят от скорости I/O; для них рекомендуется установить vm.swappiness=1 — своп только как последний резерв. Веб-серверы и приложения на интерпретируемых языках (PHP, Python) терпимее к свопу, но всё равно теряют производительность.
Мониторинг свопа через команды:
# Текущее использование
free -h
# Подробная статистика
vmstat 1 5
# Какие процессы используют своп
for pid in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3 "
"}' $pid;
done | sort -k 2 -n -r | head
Если своп занят более 50% — сигнал для увеличения оперативной памяти. На VPS с тарифами от 1 ГБ RAM своп объёмом 1–2 ГБ — разумная страховка для запуска дополнительных сервисов без OOM killer.