Гид по технологиям

Виртуальная память в Linux: понятия, настройка и лучшие практики

9 min read Linux Обновлено 12 Apr 2026
Виртуальная память в Linux: настраиваем swap
Виртуальная память в Linux: настраиваем swap

Что такое виртуальная память?

Виртуальная память — это абстракция над физической памятью системы, позволяющая программам работать с адресным пространством, которое не обязательно полностью находится в RAM. Проще говоря, ОС и аппаратное обеспечение (MMU — блок управления памятью) переводят виртуальные адреса в физические. Память делится на небольшие блоки — страницы; страницы могут храниться в RAM или в «хранилище подкачки» на диске.

Ключевые понятия (1‑строчные определения):

  • MMU: аппаратный блок процессора, который переводит виртуальные адреса в физические.
  • Страница: базовый блок управления памятью (обычно 4 KiB, но может отличаться).
  • Backing store / swap: область на диске (файл или раздел), используемая для перемещения страниц из RAM.
  • Swappiness: параметр ядра, который регулирует склонность к использованию swap (0–100).

Почему это важно:

  • Позволяет запускать приложения, использующие суммарно больше памяти, чем доступно в физическом RAM.
  • Упрощает разработку: процессы получают своё собственное непрерывное адресное пространство.
  • Спасает систему от немедленного аварийного завершения при пиковом потреблении памяти.

Ограничения и компромиссы:

  • Доступ к диску намного медленнее, чем к RAM — перенос страниц туда/обратно замедляет систему.
  • При интенсивном обмене страницами система может «thrash» (сильно тормозить).
  • На SSD частые записи могут теоретически влиять на ресурс носителя (но современные SSD имеют высокую долговечность).

Модули оперативной памяти на материнской плате ПК

Как Linux реализует swap (вкратце)

В Linux виртуальная память реализуется на уровне ядра. Swap может быть двух типов:

  • Раздел подкачки (обычно Linux swap partition) — наиболее распространённый для настольных и серверных систем.
  • Swap‑файл — файл в файловой системе, удобен для виртуальных машин, переносных систем или если не хотите менять разметку диска.

Также есть современные компрессирующие подходы: zswap (сжатое кэширование страниц в RAM с возможным выгрузом на диск) и zRAM (создаёт сжатый блок‑устройство в RAM и использует его как swap). Эти технологии полезны для систем с ограниченным объёмом физической памяти.

Раздел подкачки в Linux — как создать и подключить

Обычно установщик дистрибутива предложит создать раздел подкачки. Но можно добавить раздел позже при помощи GParted или другого инструмента. Перед изменением разметки обязательно сделайте бэкап важных данных.

После создания раздела форматируйте его как swap:

sudo mkswap /dev/sdX

Добавьте строку в /etc/fstab, чтобы раздел подключался при загрузке (замените /dev/sdX на ваш идентификатор):

/dev/sdX none swap defaults 0 0

А затем активируйте его немедленно:

sudo swapon /dev/sdX

Проверить активные swap‑объекты можно командой:

sudo swapon --show
free -h

Примечание: для систем с LVM можно создать логический том и форматировать его как swap — это удобно для динамической перестройки пространства.

Swap‑файлы: когда и как использовать

Swap‑файл удобен, если вы не хотите менять разметку диска или работаете в виртуальной машине. Создать swap‑файл можно несколькими способами.

Предпочтительный (быстрый) метод — fallocate:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Если fallocate недоступен или файловая система не поддерживает выделение непрерывного файла, можно использовать dd:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Чтобы сделать подключение постоянным, добавьте строку в /etc/fstab:

/swapfile none swap defaults 0 0

Безопасность и права:

  • Всегда ставьте права 600 (rw——-) на файл подкачки, чтобы предотвратить чтение сторонними пользователями.
  • Использование swap‑файла на файловых системах с COW (например, btrfs) требует осторожности: historically существовали ограничения, но современные ядра поддерживают swapfile на btrfs при соблюдении условий. Лучше использовать выделенный раздел или zRAM, если вы не уверены.

Swappiness: как настроить и когда менять

Swappiness — это число от 0 до 100, которое говорит ядру, насколько агрессивно следует использовать swap. По умолчанию часто стоит 60.

Примеры:

  • 0 — своп почти не используется (ядро пытается свести к минимуму выгрузку страниц).
  • 60 — баланс между использованием RAM и swap (частая default‑настройка).
  • 100 — ядро будет активно перемещать страницы в swap при любой возможности.

Изменить временно:

sudo sysctl vm.swappiness=20

Изменить постоянно — добавить или изменить строку в /etc/sysctl.conf или создать файл в /etc/sysctl.d/:

vm.swappiness=20

Рекомендации:

  • Ноутбук с большим объёмом RAM: vm.swappiness=10–20.
  • Сервер, где важна максимальная отзывчивость: 1–10.
  • Системы с очень маленькой RAM (например, 1–2 ГБ): 30–60 или использование zRAM/zswap.

Важно: уменьшение swappiness не решит проблему при реальном недостатке RAM — в этом случае единственный надёжный путь — добавить физическую память или оптимизировать потребление.

Сколько swap‑пространства нужно? Практические правила

Классическое правило «в два раза больше RAM» устарело и не применимо ко всем системам. Советы по выбору объёма:

  • Если вы хотите гибкую систему и не используете гибернацию: достаточно 1–2 ГБ для современных настольных ПК с 8+ ГБ RAM.
  • Если планируете гибернацию (suspend to disk): swap >= объёма RAM (иногда рекомендуют RAM + несколько сотен мегабайт надбавки).
  • Для серверов: ориентируйтесь на рабочие нагрузки; лучше иметь небольшой запас и мониторить поведение.
  • Для старых машин с HDD: больше swap не решит проблему производительности, стоит добавить RAM.

Эмпирический подход (heuristic):

  • Минимум: 1–2 ГБ для легковесных систем.
  • Для систем с 2–8 ГБ RAM: swap 1×–2× RAM в зависимости от потребностей.
  • Для систем с 8+ ГБ RAM: swap 0.5×–1× RAM или фиксированное 4–8 ГБ.

Факторы, влияющие на выбор:

  • Наличие гибернации.
  • Тип хранилища (SSD быстрее, но всё же медленнее RAM).
  • Наличие быстрых альтернатив (zRAM, zswap).

Альтернативы и дополнения к классическому swap

  1. zRAM — сжатый блок‑устройство в RAM, использующийся как swap. Плюсы: быстрая сжатая память, уменьшение операций записи на диск. Подходит для ноутбуков и встраиваемых устройств.

  2. zswap — кэш страниц в сжатом виде в RAM с возможным выгрузом на диск. Уменьшает количество IO на диск.

  3. tmpfs — использование RAM для временных данных (очень быстро, но ограничено объёмом RAM).

  4. Отказ от swap — некоторые встроенные системы работают без swap, но это риск: при нехватке памяти процессы будут убиваться (OOM killer).

Когда swap не работает или вреден:

  • При постоянном thrashing из‑за хронической нехватки RAM.
  • Если приложение чувствительно к задержкам (реaltime‑аудио, высокочастотная торговля) — swap увеличит задержку.

Диагностика проблем с памятью и swap

Полезные команды:

free -h
vmstat 1 5
top или htop
sudo swapon --show
dmesg | grep -i oom
cat /proc/meminfo

Признаки thrashing:

  • Высокая загрузка ввода‑вывода диска, процессор загружен ожиданием IO (IOWAIT).
  • Система «зависает», реагирует медленно на ввод.
  • При использовании HDD слышен постоянный стук или чтение/запись.

Как исправить:

  • Увеличить RAM.
  • Уменьшить swappiness временно или навсегда.
  • Включить zRAM/zswap для уменьшения дискового IO.
  • Оптимизировать приложения (убрать лишние процессы, настроить ограничения памяти для контейнеров).

Важно: прежде чем менять swappiness радикально, проанализируйте логи (dmesg) и поведение системы.

Практические чек‑листы по ролям

Системный администратор:

  • Оценить нагрузки и метрики памяти (at least 24–72 часа мониторинга).
  • Планировать RAM под рост нагрузки; держать swap для аварийных случаев.
  • Использовать LVM для гибкого управления swap (если нужно).
  • Настроить alerting при высокой swap‑активности.

Пользователь рабочего стола:

  • Если не используете гибернацию: 2–4 ГБ swap обычно хватает.
  • Для ноутбуков: предпочитать zRAM или небольшую swap‑область и низкий swappiness (10–20).
  • Не забывать закрывать тяжёлые приложения и вкладки браузера.

Разработчик/тестер портативных систем:

  • Используйте swap‑файл для быстрых тестов вместо переразметки диска.
  • Следите за правами и добавляйте запись в /etc/fstab для воспроизводимости окружения.

Чеклист команд (конспект)

  • Создать swap‑файл 2 ГБ:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
  • Включить swap‑раздел:
sudo mkswap /dev/sdX
sudo swapon /dev/sdX
  • Посмотреть swap:
sudo swapon --show
free -h
  • Временно поменять swappiness:
sudo sysctl vm.swappiness=20
  • Постоянно установить swappiness:
echo 'vm.swappiness=20' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system

Практические сценарии (когда что выбрать)

  • Виртуальная машина на хосте с ограничённым дисковым пространством: swap‑файл удобнее и быстрее добавляется.
  • Сервер с интенсивной базой данных: лучше добавить RAM, минимизировать использование swap и тщательно мониторить IO.
  • Ноутбук для повседневной работы без гибернации: zRAM + небольшой swap‑файл даёт хороший баланс.
  • Встраиваемая система с очень ограниченными ресурсами: возможно полное отсутствие swap и строгие лимиты по памяти для процессов.

Когда нужна гибернация

Если вы хотите использовать гибернацию (suspend to disk), swap должен быть не меньше объёма RAM, обычно рекомендуется равный или немного больший объём. Гибернация сохраняет содержимое RAM в swap и затем выключает питание; при старте система восстанавливает память из swap.

Пример decision‑tree для выбора варианта swap

flowchart TD
  A[Нужен swap?] -->|Да| B{Планируете гибернацию?}
  A -->|Нет| Z[Отключить swap или использовать zRAM]
  B -->|Да| C[Swap >= RAM: использовать раздел или большой swap‑файл]
  B -->|Нет| D{Это VM или нельзя менять разделы?}
  D -->|Да| E[Использовать swap‑файл]
  D -->|Нет| F[Использовать swap‑раздел; мониторить swappiness]
  C --> G[Проверить /etc/fstab и dmesg]
  E --> G
  F --> G

Совместимость файловых систем и нюансы

  • ext4: полностью поддерживает swap‑файлы.
  • XFS: также поддерживает swap‑файлы при стандартной настройке.
  • btrfs: исторически были ограничения для swap‑файлов из‑за COW; современные ядра и конфигурации позволяют использовать swap‑файлы при определённых условиях, но часто безопаснее выделить раздел под swap.
  • ZFS: обычно используют разделы или отдельные устройства для swap; swap‑файлы на ZFS не являются распространённой практикой.

Если вы не уверены в совместимости вашей FS, используйте раздел подкачки или zRAM.

Короткая методика добавления swap‑файла — шаг за шагом

  1. Выберите размер (например, 2G).
  2. Создайте файл: fallocate или dd.
  3. Установите права: chmod 600 /swapfile.
  4. Инициализируйте: mkswap /swapfile.
  5. Включите: swapon /swapfile.
  6. Добавьте в /etc/fstab: /swapfile none swap defaults 0 0.
  7. Проверьте: swapon –show, free -h.

Безопасность и приватность

Файлы и разделы swap могут содержать «сырые» данные из RAM (включая фрагменты ключей или паролей). Чтобы снизить риски:

  • Шифруйте swap (например, с использованием LUKS) на ноутбуках и портативных устройствах.
  • Используйте tmpfs для конфиденциальных временных данных.

Важно для GDPR и других требований: при утилизации дисков убедитесь, что данные в swap надёжно уничтожены или диск полностью зашифрован.

Частые ошибки и как их избежать

  • Ошибка: создание swap‑файла без установки прав 600 — риск доступа к данным. Решение: всегда chmod 600.

  • Ошибка: слишком большой swappiness — система начинает активно использовать диск. Решение: снизьте swappiness и добавьте RAM.

  • Ошибка: попытка использовать swap‑файл на файловой системе с неподдерживаемыми возможностями (старые ядра, btrfs без нужных настроек). Решение: либо используйте раздел, либо проверьте документацию и ядро.

FAQ

Q: Можно ли удалить swap‑файл на лету?

A: Да. Отключите его командой sudo swapoff /swapfile, затем удалите файл и обновите /etc/fstab.

Q: Повредит ли использование swap SSD?

A: Современные SSD рассчитаны на большое количество циклов записи; умеренное использование swap вряд ли критично. Тем не менее, интенсивный постоянный swap может привести к более быстрому износу по сравнению с минимальным использованием.

Q: Что лучше: swap‑раздел или swap‑файл?

A: Для настольных ПК и серверов чаще используют раздел; для виртуальных машин и если нежелательно менять разметку — swap‑файл. zRAM и zswap хороши для маломощных систем.

Итог и рекомендации

  • Для новых установок доверяйте подсказкам инсталлятора: раздел подкачки подходит для большинства случаев.
  • Для ноутбуков и маломощных систем рассмотрите zRAM и небольшой swap‑файл.
  • Если нужна гибернация — обеспечьте swap не меньше RAM.
  • Мониторьте метрики (free, vmstat, iostat) и настраивайте swappiness по необходимости.

Важно:

  • Всегда делайте резервные копии перед изменением разметки диска.
  • Настройка swap — это часть общей стратегии управления памятью; в большинстве случаев лучше увеличить физическую RAM, чем рассчитывать на длительное использование swap.

Краткое резюме в 3 пунктах:

  • Swap расширяет доступную память, но медленнее RAM.
  • Выберите раздел или файл в зависимости от сценария; используйте zRAM/zswap для слабых систем.
  • Настройте swappiness и мониторьте систему, чтобы избежать thrashing.

Источник иллюстраций: изображения аппарата и интерфейса установки сохранены в статье для наглядности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как изменить скорость воспроизведения на YouTube
How-to

Как изменить скорость воспроизведения на YouTube

Outlook: правила для организации почты
Продуктивность

Outlook: правила для организации почты

Как подарить аудиокнигу: 8 способов
Подарки

Как подарить аудиокнигу: 8 способов

Социальная аутентификация в Django — Google и allauth
Разработка

Социальная аутентификация в Django — Google и allauth

Удалить геотеги на iPhone перед отправкой
Конфиденциальность

Удалить геотеги на iPhone перед отправкой

Как изменить статус в Slack
Продуктивность

Как изменить статус в Slack