Виртуальная память в Linux: что это, swap и как настроить
Кратко: виртуальная память расширяет оперативную память за счёт дискового пространства (swap). В Linux swap может быть разделом или файлом; выбор, размер и параметры вроде swappiness влияют на производительность и поведение системы.

Что такое виртуальная память?
Виртуальная память — это слой абстракции над физической оперативной памятью (RAM). Она объединяет объём RAM и выделенное пространство на диске (swap) в одно логическое адресное пространство, которое видит ядро и приложения. Каждый процесс получает своё виртуальное адресное пространство: ядро и MMU (Memory Management Unit) переводят виртуальные адреса в физические страницы памяти.
Ключевая мысль: виртуальная память позволяет запускать программы, которые теоретически требуют больше памяти, чем есть в RAM, потому что части данных можно временно хранить на диске.
Краткое определение термина: страница — минимальный блок памяти, который ядро может перемещать между RAM и swap.
Как это работает, простыми словами
- Процессы используют виртуальные адреса; аппарат и ядро переводят их в физические.
- Память разбивается на страницы (обычно 4КБ, но могут быть большие страницы).
- Неприменимые в данный момент страницы могут быть «выгружены» на диск в swap (swapped out).
- Когда страница снова нужна, система «подкачивает» её обратно в RAM (swapped in).
Если система постоянно подкачивает страницы туда и обратно, это называется thrashing («интенсивный свопинг») — в этом случае производительность сильно падает.
Swap в Linux: раздел или файл?
Два формата swap в Linux:
- Раздел swap: выделенный раздел на диске с файловой системой «Linux swap». Традиционно предпочтителен для рабочих станций и серверов.
- Swap-файл: обычный файл в файловой системе, который можно создать без изменения разметки диска. Удобен в виртуальных машинах, на уже разметённых дисках или в случаях, когда нельзя создавать разделы.
Когда выбирать раздел:
- Установщик предлагает его по умолчанию — подходит большинству пользователей.
- Серверы и десктопы: раздел обычно предпочтительнее.
Когда выбирать файл:
- Виртуальные машины.
- Быстрая временная настройка или отсутствие возможности менять разметку.
Как создать раздел swap (пошагово)
Важно: заранее сделайте резервную копию важных данных, если будете менять разметку.
- Создайте новый раздел с помощью ненарушающего данных инструмента (GParted). Выберите тип “linux-swap”.
- Узнайте имя раздела, например /dev/sdX или /dev/nvme0n1pY.
- Подготовьте раздел для swap:
sudo mkswap /dev/sdX- Добавьте запись в /etc/fstab, чтобы swap монтировался при загрузке. Рекомендуется использовать UUID раздела:
# Получить UUID
sudo blkid /dev/sdX
# Пример строки в /etc/fstab
UUID=ваш-uuid none swap sw 0 0- Активируйте swap немедленно:
sudo swapon /dev/sdX- Проверьте, что swap активен:
swapon --show
free -h
cat /proc/swapsКак создать swap-файл (пошагово)
Swap-файл требует меньше изменений на диске. Типичный SOP:
- Создать файл нужного размера (пример 2G) с помощью fallocate:
sudo fallocate -l 2G /swapfileЕсли fallocate недоступен или вы хотите контролировать заполнение, используйте dd:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048- Ограничить доступ к файлу и подготовить его:
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile- Чтобы swap-файл подключался при загрузке, добавьте в /etc/fstab:
/swapfile none swap sw 0 0- Проверка:
swapon --show
free -hСоветы по безопасности: chmod 600 защищает содержимое swap-файла от чтения другими пользователями.
Полезные команды для работы и диагностики
- Показать активные swap-разделы/файлы:
swapon --show
cat /proc/swaps- Проверить использование памяти:
free -h
htop # или top- Временно отключить swap (например, перед изменением):
sudo swapoff -a # отключить все swap-устройства
sudo swapon -a # включить все, указанные в /etc/fstab- Посмотреть текущий swappiness:
cat /proc/sys/vm/swappiness- Установить swappiness временно:
sudo sysctl vm.swappiness=20- Задать swappiness постоянно: в /etc/sysctl.conf добавьте строку
vm.swappiness=20Что такое swappiness и как его настраивать
Swappiness — параметр ядра (0–100), который управляет склонностью системы к использованию swap:
- 0 — минимальный свопинг (практически не использовать swap, пока это не критично).
- 100 — активно использовать swap при первых возможностях.
- По умолчанию часто стоит 60.
Рекомендации:
- Десктоп: 10–30 (меньше задержек, меньше свопинга).
- Сервер с большим объёмом RAM: 10–60, зависит от нагрузки.
- Если используете гибернацию (suspend-to-disk), размер swap должен быть не меньше объёма RAM или равен сумме RAM + требуемой подгрузке.
Важно: swappiness не влияет на скорость диска, а только на политику перемещения страниц между RAM и swap.
Когда swap мешает: симптомы и способы устранения
Симптомы чрезмерного свопинга (thrashing):
- Система медленно откликается, приложения «залипают».
- Постоянная активность диска (особенно заметно на HDD).
Как действовать:
- Добавьте RAM — наиболее очевидное решение.
- Уменьшите swappiness.
- Временное отключение swap и анализ потребления памяти (swapoff -a, затем наблюдение).
- Оптимизируйте запущенные приложения (закройте ненужные процессы).
- Используйте zram или zswap для компрессии памяти вместо записи на диск (альтернатива для систем с ограниченным объёмом RAM).
Альтернативы и расширенные опции
- zswap и zram: сжатая область в памяти (zram) или кэшированный swap в RAM (zswap) позволяет уменьшить записи на диск и повысить отзывчивость при нехватке RAM.
- Swap на LVM: можно создать логический том под swap и менять его размер динамически.
- Swap на отдельном диске: полезно на системах с высокой нагрузкой ввода-вывода.
Когда альтернативы полезны:
- Встраиваемые системы или системы с ограниченной персистентной памятью — zram часто предпочтительнее.
- На серверах с высокой частотой swap-операций стоит рассмотреть выделение отдельного SSD или использование памяти с высокой скоростью.
Как выбрать размер swap: мини-методология
- Определите цель:
- Гибернация: swap ≥ объёма RAM.
- Защита от пиков: небольшой запас (0.5–1× RAM).
- Системы с ограниченной RAM: больше swap может помочь, но не заменит RAM по производительности.
- Учтите тип диска:
- SSD: быстрее, но долгосрочное влияние записи следует оценить.
- HDD: медленнее, thrashing сильно заметнее.
- Профилируйте фактическую нагрузку:
- Наблюдайте usage в течение рабочих сценариев и корректируйте.
Правило большого пальца (современные системы):
- 4 ГБ RAM или меньше — swap 1–2× RAM может пригодиться.
- 8–16 ГБ RAM — swap 1× RAM или меньше для защиты.
- 32+ ГБ RAM — часто достаточно небольшого swap (2–8 ГБ) для аварийных случаев, если не нужна гибернация.
Это ориентиры; конечное решение зависит от реальных рабочих нагрузок.
Пошаговый план: добавить swap-файл (SOP)
- Оценить текущую ситуацию: sudo swapon –show; free -h.
- Создать файл нужного размера: sudo fallocate -l 4G /swapfile.
- Ограничить доступ: sudo chmod 600 /swapfile.
- Подготовить файл: sudo mkswap /swapfile.
- Активировать: sudo swapon /swapfile.
- Добавить в /etc/fstab: /swapfile none swap sw 0 0.
- Проверить: swapon –show; free -h.
- При необходимости настроить vm.swappiness в /etc/sysctl.conf.
Чек-листы по ролям
Администратор сервера:
- Проверить требования к гибернации.
- Оценить рабочие нагрузки и I/O.
- Решить: раздел swap или LVM.
- Мониторить swappiness и корректировать.
Пользователь рабочего стола:
- Если мало RAM — добавить swap-файл.
- Установить swappiness 10–20 для лучшей отзывчивости.
- Защитить swap-файл правами доступа.
Встраиваемая система / устройство с малым объёмом диска:
- Рассмотреть zram вместо традиционного swap.
- Избегать больших swap-файлов на медленной флеш-памяти.
Критерии приёмки
- swap отображается в swapon –show.
- free -h показывает ожидаемый объём swap.
- После перезагрузки swap автоматически подключается (проверить /etc/fstab).
- Система остаётся стабильной и откликается в типичных сценариях.
Дерево решений: нужно ли добавлять swap? (Mermaid)
flowchart TD
A[Запрос: Нужен ли swap?] --> B{Есть ли у системы ≥ 16 ГБ RAM?}
B -- Да --> C{Используется гибернация?}
B -- Нет --> D[Рекомендуется иметь swap]
C -- Да --> E[Добавить swap ≥ RAM]
C -- Нет --> F[Добавить небольшой swap '2–8 ГБ' или zram]
D --> G{Это сервер?}
G -- Да --> H[Рассмотреть раздел или LVM]
G -- Нет --> I[Swap-файл удобнее]Частые ошибки и их исправление
- Ошибка: забыли добавить запись в /etc/fstab — исправление: добавить запись и перезагрузиться или выполнить swapon -a.
- Ошибка: использовали dd и указали неверный путь — результат: возможная потеря данных; всегда тщательно проверяйте команды и пути.
- Ошибка: права на swap-файл открыты (например 644) — исправление: sudo chmod 600 /swapfile.
Совместимость и миграция
- Перемещение swap между дискам: отключите (swapoff), создайте на новом диске и включите.
- Swap и LVM: можно перемещать логические тома, если планируете гибкость.
- С SSD: учтите потенциальное увеличение записи, но современные SSD имеют высокую долговечность; по-прежнему лучше минимизировать ненужный свопинг.
Краткая галерея крайних случаев
- Сервер с постоянными пиковыми нагрузками: swap не заменит недостаток RAM — увеличивайте RAM или перераспределяйте нагрузку.
- Встроенная система с ограниченной флеш-памятью: лучше zram, чтобы избежать множества циклов записи.
- Виртуальная машина, где нельзя менять разделы: удобнее swap-файл.
Резюме
Виртуальная память и swap — важные механизмы, которые позволяют системе оставаться стабильной при нехватке RAM. Для большинства десктопов и серверов разумно использовать раздел swap, а для виртуальных машин и быстрых исправлений — swap-файл. Настройка swappiness и мониторинг реального поведения помогут найти баланс между производительностью и надёжностью.
Важно: если система часто свопит, перезагрузки или уменьшение swappiness — временные меры; лучше добавить оперативной памяти или оптимизировать приложения.
Вопросы для проверки после настройки:
- Отображается ли swap в swapon –show?
- Работает ли swap после перезагрузки?
- Изменилось ли время отклика системы при типичной нагрузке?
Полезные ссылки (по смыслу — для дальнейшего чтения): man mkswap, man swapon, man sysctl, документация вашей дистрибуции.
Похожие материалы
Настройка роутера — быстрый практический гид
Fire Toolbox — как настроить планшет Amazon Fire
Конвертация XML в JSON с помощью xq
COUNT в Excel — как считать ячейки с числами
Синхронизация RGB: SignalRGB, OpenRGB и Dynamic Lighting