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

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

7 min read Linux Обновлено 24 Dec 2025
Виртуальная память и swap в Linux
Виртуальная память и swap в Linux

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

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

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

Виртуальная память — это слой абстракции над физической оперативной памятью (RAM). Она объединяет объём RAM и выделенное пространство на диске (swap) в одно логическое адресное пространство, которое видит ядро и приложения. Каждый процесс получает своё виртуальное адресное пространство: ядро и MMU (Memory Management Unit) переводят виртуальные адреса в физические страницы памяти.

Ключевая мысль: виртуальная память позволяет запускать программы, которые теоретически требуют больше памяти, чем есть в RAM, потому что части данных можно временно хранить на диске.

Краткое определение термина: страница — минимальный блок памяти, который ядро может перемещать между RAM и swap.

Как это работает, простыми словами

  • Процессы используют виртуальные адреса; аппарат и ядро переводят их в физические.
  • Память разбивается на страницы (обычно 4КБ, но могут быть большие страницы).
  • Неприменимые в данный момент страницы могут быть «выгружены» на диск в swap (swapped out).
  • Когда страница снова нужна, система «подкачивает» её обратно в RAM (swapped in).

Если система постоянно подкачивает страницы туда и обратно, это называется thrashing («интенсивный свопинг») — в этом случае производительность сильно падает.

Swap в Linux: раздел или файл?

Схема разметки диска установщика Debian с разделом под swap

Два формата swap в Linux:

  • Раздел swap: выделенный раздел на диске с файловой системой «Linux swap». Традиционно предпочтителен для рабочих станций и серверов.
  • Swap-файл: обычный файл в файловой системе, который можно создать без изменения разметки диска. Удобен в виртуальных машинах, на уже разметённых дисках или в случаях, когда нельзя создавать разделы.

Когда выбирать раздел:

  • Установщик предлагает его по умолчанию — подходит большинству пользователей.
  • Серверы и десктопы: раздел обычно предпочтительнее.

Когда выбирать файл:

  • Виртуальные машины.
  • Быстрая временная настройка или отсутствие возможности менять разметку.

Как создать раздел swap (пошагово)

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

  1. Создайте новый раздел с помощью ненарушающего данных инструмента (GParted). Выберите тип “linux-swap”.
  2. Узнайте имя раздела, например /dev/sdX или /dev/nvme0n1pY.
  3. Подготовьте раздел для swap:
sudo mkswap /dev/sdX
  1. Добавьте запись в /etc/fstab, чтобы swap монтировался при загрузке. Рекомендуется использовать UUID раздела:
# Получить UUID
sudo blkid /dev/sdX

# Пример строки в /etc/fstab
UUID=ваш-uuid none swap sw 0 0
  1. Активируйте swap немедленно:
sudo swapon /dev/sdX
  1. Проверьте, что swap активен:
swapon --show
free -h
cat /proc/swaps

Как создать swap-файл (пошагово)

Swap-файл требует меньше изменений на диске. Типичный SOP:

  1. Создать файл нужного размера (пример 2G) с помощью fallocate:
sudo fallocate -l 2G /swapfile

Если fallocate недоступен или вы хотите контролировать заполнение, используйте dd:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
  1. Ограничить доступ к файлу и подготовить его:
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
  1. Чтобы swap-файл подключался при загрузке, добавьте в /etc/fstab:
/swapfile none swap sw 0 0
  1. Проверка:
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: мини-методология

  1. Определите цель:
    • Гибернация: swap ≥ объёма RAM.
    • Защита от пиков: небольшой запас (0.5–1× RAM).
    • Системы с ограниченной RAM: больше swap может помочь, но не заменит RAM по производительности.
  2. Учтите тип диска:
    • SSD: быстрее, но долгосрочное влияние записи следует оценить.
    • HDD: медленнее, thrashing сильно заметнее.
  3. Профилируйте фактическую нагрузку:
    • Наблюдайте usage в течение рабочих сценариев и корректируйте.

Правило большого пальца (современные системы):

  • 4 ГБ RAM или меньше — swap 1–2× RAM может пригодиться.
  • 8–16 ГБ RAM — swap 1× RAM или меньше для защиты.
  • 32+ ГБ RAM — часто достаточно небольшого swap (2–8 ГБ) для аварийных случаев, если не нужна гибернация.

Это ориентиры; конечное решение зависит от реальных рабочих нагрузок.

Пошаговый план: добавить swap-файл (SOP)

  1. Оценить текущую ситуацию: sudo swapon –show; free -h.
  2. Создать файл нужного размера: sudo fallocate -l 4G /swapfile.
  3. Ограничить доступ: sudo chmod 600 /swapfile.
  4. Подготовить файл: sudo mkswap /swapfile.
  5. Активировать: sudo swapon /swapfile.
  6. Добавить в /etc/fstab: /swapfile none swap sw 0 0.
  7. Проверить: swapon –show; free -h.
  8. При необходимости настроить 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 и мониторинг реального поведения помогут найти баланс между производительностью и надёжностью.

htop, показывающий использование виртуальной памяти

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

Вопросы для проверки после настройки:

  • Отображается ли swap в swapon –show?
  • Работает ли swap после перезагрузки?
  • Изменилось ли время отклика системы при типичной нагрузке?

Полезные ссылки (по смыслу — для дальнейшего чтения): man mkswap, man swapon, man sysctl, документация вашей дистрибуции.

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

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

Настройка роутера — быстрый практический гид
Сети

Настройка роутера — быстрый практический гид

Fire Toolbox — как настроить планшет Amazon Fire
Технологии

Fire Toolbox — как настроить планшет Amazon Fire

Конвертация XML в JSON с помощью xq
Инструменты

Конвертация XML в JSON с помощью xq

COUNT в Excel — как считать ячейки с числами
Excel

COUNT в Excel — как считать ячейки с числами

Синхронизация RGB: SignalRGB, OpenRGB и Dynamic Lighting
RGB

Синхронизация RGB: SignalRGB, OpenRGB и Dynamic Lighting

Что такое Snapchat score и как его повысить
Социальные сети

Что такое Snapchat score и как его повысить