3.3.3 Область подкачки (swap)
Основные понятия
Типы памяти в Linux
Принципы работы swap
Типы организации swap
Параметр swappiness
Zram и zswap
Zram
Zswap
Рекомендуемый объем swap
Настройка swap в РЕД ОС
Проверка текущей конфигурации
Создание файла подкачки
Настройка автоматического подключения файла подкачки
Отключение файла подкачки
Отключение раздела подкачки
Окружение
- Версия ОС: 8
- Конфигурация ОС: Рабочая станция, Сервер графический, Сервер минимальный
- Редакция ОС: Стандартная, Образовательная
Подкачка (swap) — механизм вытеснения неактивных анонимных страниц памяти на диск (или в сжатое пространство), позволяющий ядру освобождать физическую память для активных задач. Он позволяет операционной системе временно хранить редко используемые данные на диске, освобождая оперативную память (ОЗУ) для более важных задач. В РЕД ОС, как и в других дистрибутивах на базе Linux, swap играет ключевую роль в управлении ресурсами, особенно при нехватке физической памяти.
Основные понятия
Вытеснение (eviction) — процесс удаления страниц памяти из ОЗУ для освобождения места.
Освобождение (reclaim) — процесс освобождения страниц памяти, которые могут быть удалены без потери данных.
Пробуксовка (thrashing) — состояние, при котором система постоянно вытесняет и загружает страницы памяти, что приводит к резкому падению производительности.
Грязные/чистые страницы (dirty/clean) — страницы памяти, которые были изменены (грязные) или не изменены (чистые) с момента последней записи на диск.
Нехватка памяти (memory starvation) — ситуация, когда системе не хватает оперативной памяти для выполнения задач.
zRam — механизм сжатия страниц памяти в ОЗУ, создающий виртуальное блочное устройство для временного хранения данных. Позволяет хранить вытесняемые страницы в сжатом виде в RAM вместо записи на диск, что снижает нагрузку на накопители и может повышать производительность.
OOM killer (Out of Memory Killer) — механизма ядра, аварийно завершающего процессы при критической нехватке памяти.
Типы памяти в Linux
В Linux различают следующие основные типы памяти:
-
файловая память — страницы памяти, используемые для кеширования данных и метаданных файлов. Представляет собой основу файлового кеша системы;
-
анонимная память — память, выделяемая выполняемым кодом (например, через
malloc()илиmmap()с флагомMAP_ANONYMOUS). Называется анонимной, так как не связана с файлами на диске.
Принципы работы swap
Swap позволяет системе временно хранить редко используемые данные на диске, освобождая оперативную память для более важных задач. Даже если физическая память не исчерпана, ядро (при vm.swappiness > 0) может вытеснять анонимные страницы в swap, чтобы поддерживать запас свободной памяти. Это особенно полезно при кратковременных всплесках использования памяти, работе с ресурсоёмкими приложениями или для предотвращения аварийного завершения работы системы при нехватке памяти.
На практике swap начинает использоваться заметно раньше, чем оперативная память заполнится полностью — часто уже при 60–80% занятости RAM (в зависимости от настроек и значения параметра vm.swappiness).
Механизм работы swap включает следующие этапы:
1. Выделение памяти.
Когда приложению требуется память, система выделяет её из ОЗУ. Если ОЗУ заканчивается, редко используемые страницы памяти вытесняются в swap.
2. Выбор страниц памяти для вытеснения (eviction).
Ядро определяет, какие страницы памяти можно вытеснить на диск, чтобы освободить место в ОЗУ. Приоритет отдаётся недавно неиспользованным страницам (inactive LRU). Баланс между анонимными и файловыми страницами регулируется параметром vm.swappiness (по умолчанию имеет значение 60 — в приоритете вытеснение file-backed страницы).
3. Освобождение памяти (reclaim).
Зависит от типа страниц памяти:
-
в первую очередь вытесняются (evict) файловые страницы (page cache, mmap-файлы, исполняемые файлы):
-
чистые файловые страницы удаляются из памяти без записи в файл, так как их содержимое не изменялось;
-
изменённые (грязные) страницы сбрасываются обратно в исходный файл перед освобождением из памяти;
-
-
только потом вытесняются анонимные страницы (кучи процессов, стеки) в swap или zRam при нехватке памяти, у них нет понятия «чистая» — они изначально считаются изменёнными.
4. Возвращение страниц (Swapping in / Page Fault).
Когда процессу требуется страница памяти, которая была вытеснена в swap, происходит страничное прерывание (page fault). Ядро считывает страницу памяти из swap-области обратно в ОЗУ.
Важный вывод:
-
Swap — это механизм исключительно для анонимной памяти процессов. Файловый кеш в swap не попадает.
При отсутствии пространства подкачки анонимные страницы не могут быть вытеснены, что повышает вероятность срабатывания OOM killer.
Типы организации swap
Основные варианты организации пространства подкачки:
1. Раздел подкачки (swap partition) — отдельный раздел на накопителе, отформатированный как swap. При установке РЕД ОС с параметрами разметки диска по умолчанию создается автоматически.
2. Файл подкачки (swap file) — специальным образом сформированный файл, находящийся в файловой системе. Может быть создан после установки системы при необходимости дополнительной подкачки.
3. Сжатое пространство (zRam) — сжатое пространство подкачки в физической памяти.
Параметр swappiness
Параметр vm.swappiness определяет баланс между освобождением анонимных страниц и файлового кеша. Значение по умолчанию в РЕД ОС — 60.
Значения параметра и их влияние:
-
0–10— анонимные страницы практически не освобождаются (кроме критической нехватки памяти), ядро старается максимально долго удерживать анонимную память в RAM, вытесняя в первую очередь файловый кеш. Данный диапазон часто рекомендуется для серверов баз данных (PostgreSQL, MySQL, Redis); -
10–99— в этом диапазоне действует следующая закономерность:-
чем меньше значение, тем приоритетнее сохраняется анонимная память (swap используется реже);
-
чем больше значение, тем активнее вытесняются анонимные страницы в swap ради сохранения файлового кеша;
Диапазон подходит для систем виртуализации (KVM, Docker), а также для файловых серверов.
-
-
100— сбалансированное поведение: ядро считает стоимость вытеснения анонимных страниц и сброса файлового кеша примерно равной; -
Значение от
100до200— ядро считает вытеснение анонимных страниц менее затратным, чем сброс файлового кеша. Такой режим имеет смысл в системах, где swap размещён на быстром накопителе (NVMe-SSD) , а файловая система — на более медленном (HDD) . В таком сценарии выгрузить память в быстрый swap эффективнее, чем сбрасывать изменённый кеш на медленный диск.
Просмотр текущего значения vm.swappiness:
- Способ 1 — через sysctl:
sysctl vm.swappiness
- Способ 2 — чтение из proc:
cat /proc/sys/vm/swappiness
Временное изменение vm.swappiness (до перезагрузки):
sudo sysctl -w vm.swappiness=30
Постоянное изменение vm.swappiness:
Добавить или изменить строку в файле /etc/sysctl.conf (или в одном из файлов в каталоге /etc/sysctl.d/, например /etc/sysctl.d/custom.conf):
vm.swappiness=30
Применить изменения без перезагрузки:
sudo sysctl -p
Zram и zswap
Zram
Zram — модуль ядра Linux, создающий блочное устройство в оперативной памяти с компрессией данных «на лету».
Используется как:
-
пространство подкачки;
-
RAM-диск общего назначения.
Особенности:
-
динамически изменяет объем используемой памяти;
-
максимальный размер указывается по несжатым данным;
-
гибернация недоступна.
Zswap
Zswap — механизм ядра Linux, реализующий сжатый кеш в оперативной памяти. Страницы, подлежащие вытеснению, сначала сжимаются и сохраняются в RAM.
Основное отличие от zram: zswap работает в паре с реальным swap-устройством, а zram является таким устройством.
Подробнее о настройке zswap читайте в инструкции «Настройка zswap».
Одновременное использование zram и zswap не рекомендуется, так как zswap функционирует как кеш перед swap-устройством, которым может являться zram.
Рекомендуемый объем swap
Рекомендуемый объем пространства подкачки:
|
Объем оперативной памяти (ОЗУ) |
Рекомендуемый размер swap |
Рекомендуемый размер swap при гибернации |
|---|---|---|
|
До 2 ГБ |
Не менее 2 ГБ |
Объем ОЗУ x 3 |
|
2 ГБ – 8 ГБ |
Равно объему оперативной памяти |
Объем ОЗУ x 2 |
|
8 – 32 ГБ |
Не менее 4 ГБ |
Объем ОЗУ x 1.5 |
|
Более 32 ГБ |
Не менее 4 ГБ |
Использование гибернации не рекомендуется |
Для сервера с 64 ГБ ОЗУ достаточно swap около 4 ГБ, который используется как «предохранитель» против срабатывания OOM killer при кратковременных пиках нагрузки.
Настройка swap в РЕД ОС
При установке РЕД ОС с параметрами разметки диска по умолчанию, раздел подкачки создается автоматически. Если была выбрана ручная разметка диска и в процессе диск был размечен без swap, то пространство подкачки на накопителе не используется.
Если для какой-либо задачи пространства подкачки в разделе, созданном автоматически, недостаточно, можно подключить дополнительную подкачку, например, в виде файла подкачки.
Проверка текущей конфигурации
Для проверки текущей конфигурации выполните команду:
sudo swapon --show
Пример вывода автоматической конфигурации при установке (ОЗУ 8 ГБ):
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 7,8G 0B 100
/dev/sda3 partition 7,9G 0B -2
где:
-
zram0— виртуальное устройство сжатой памяти; -
sda3— раздел подкачки.
Пример вывода при ручной разметке без раздела подкачки (ОЗУ 8 ГБ):
NAME TYPE SIZE USED PRIO /dev/zram0 partition 7,8G 0B 100
Если установка будет выполнена без раздела подкачки, будет продолжать использоваться механизм zRam.
Создание файла подкачки
Для создания файла подкачки выполните следующие действия:
1. Создайте файл нужного размера:
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
где:
-
of=/swapfile— путь и имя файла; -
count=4096— задаёт размер файла в мегабайтах (4 ГБ).
2. Настройте права доступа. Файл подкачки должен быть доступен только для чтения/записи суперпользователю:
sudo chown root:root /swapfile sudo chmod 0600 /swapfile
3. Отформатируйте файл под swap:
sudo mkswap /swapfile
4. Активируйте файл подкачки:
sudo swapon /swapfile
5. Проверьте наличие активного swap-файла:
sudo swapon --show
В выводе должна появиться строка следующего вида:
/swapfile file 4G 0B -3
Настройка автоматического подключения файла подкачки
Для автоматического подключения файла подкачки при запуске системы выполните следующие действия:
1. Добавьте запись в /etc/fstab:
echo '/swapfile none swap defaults 0 0' | sudo tee -a /etc/fstab
2. Проверить правильность заполнения fstab можно воспользовавшись командой findmnt:
sudo findmnt --verify
Для файла подкачки предупреждения являются ожидаемыми и не свидетельствуют об ошибке:
none [W] target specified more than once none [W] non-bind mount source /swapfile is a directory or regular file 0 parse errors, 0 errors, 2 warnings
3. Перезагрузите компьютер:
sudo reboot
4. Проверьте использование файла подкачки:
sudo swapon --show
Пример вывода:
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 7,8G 0B 100
/swapfile file 4G 0B -2
Отключение файла подкачки
Для отключения файла подкачки выполните следующие действия:
1. Проверьте используемые swap-устройства и файлы:
sudo swapon --show
Из вывода команды необходимо запись о подкачке типа file и путь до этого файла, их может быть несколько.
NAME TYPE SIZE USED PRIO /swapfile file 4G 0B -2
2. Остановите использование файла подкачки:
sudo swapoff /swapfile
Файл подкачки будет отключен.
3. Для предотвращения автоматического подключения файла подкачки после перезагрузки необходимо закомментировать соответствующие строки в файле /etc/fstab. Откройте на редактирование файл /etc/fstab:
sudo nano /etc/fstab
Закомментируйте строки c файлами подкачки.
Пример строки после редактирования:
# /swapfile none swap defaults 0 0
Сохраните изменения (Ctrl + S, затем Ctrl + X).
4. Проверьте корректность /etc/fstab:
sudo findmnt --verify
В выводе не должно быть ошибок.
5. Перезапустите компьютер и проверьте используемые пространства подкачки:
sudo swapon --show
Отключение раздела подкачки
Для отключения раздела подкачки выполните следующие действия:
1. Определите имя блочного устройства, которое относится к разделу подкачки. Команда lsblk -f покажет данную информацию. У требуемого устройства будет тип файловой системы swap.
sudo lsblk -f
Пример вывода:
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS sda ├─sda1 ├─sda2 ext4 1.0 28bf9778-d096-4c94-8f11-eabf043b19dd 575M 34% /boot ├─sda3 swap 1 5010cea4-1069-4af2-9f74-bcd577e90556 [SWAP] └─sda4 ext4 1.0 36c9d0aa-8ccb-45aa-a5ed-aabe087ed256 22,7G 29% / zram0 [SWAP]
В данном примере разделом подкачки является устройство /dev/sda3. Наличие надписи [SWAP] в колонке MOUNTPOINTS означает, что раздел активен.
2. Остановите использование раздела подкачки (в примере /dev/sda3):
sudo swapoff /dev/sda3
Раздел подкачки будет отключен.
3. Отключите автоматическое подключение раздела после перезагрузки. Для этого закомментируйте соответствующую строку в файле /etc/fstab:
sudo nano /etc/fstab
Найдите строку с UUID или именем устройства раздела подкачки и закомментируйте её, добавив # в начало строки.
Пример строки после редактирования:
# UUID=5010cea4-1069-4af2-9f74-bcd577e90556 none swap defaults 0 0
Сохраните изменения (Ctrl + S, затем Ctrl + X).
4. Проверьте существующие службы подкачки и отключите нужную. Сначала выполните команду для просмотра всех доступных служб:
systemctl list-unit-files --type=swap --all
Найдите в списке службу подкачки, соответствующую вашему разделу.
Затем проверьте статус этой службы:
systemctl status '<имя_службы>.swap'
Одинарные кавычки нужны для обработки специальных символов в имени службы.
Пример вывода до маскировки:
○ <имя_службы>.swap - Swap Partition
Loaded: loaded (/run/systemd/generator.late/<имя_службы>.swap; generated)
Active: inactive (dead) since Tue 2026-04-07 15:03:48 MSK; 43s ago Duration: 4min 24.116s What: /dev/disk/by-diskseq/1-part3 Docs: man:systemd-gpt-auto-generator(8) CPU: 2ms
где Loaded: loaded означает, что маскировка не применена.
Отключите службу systemd для раздела подкачки:
sudo systemctl mask '<имя_службы>.swap'
Пример вывода:
Created symlink /etc/systemd/system/<имя_службы>.swap → /dev/null.
Проверьте статус службы после маскировки:
systemctl status '<имя_службы>.swap'
Пример вывода:
○ <имя_службы>.swap
Loaded: masked (Reason: Unit <имя_службы>.swap is masked.)
Active: inactive (dead) since Tue 2026-04-07 15:03:48 MSK; 3min 6s ago Duration: 4min 24.116s CPU: 2ms
где Loaded: masked означает, что маскировка применена успешно.
5. Перезагрузите компьютер:
reboot
6. Проверьте используемые пространства подкачки:
sudo swapon --show
В выводе команды swapon --show не должно быть записи об отключенном дисковом разделе подкачки.
Если после маскировки юнита и перезагрузки в выводе swapon --show дисковый раздел подкачки остаётся активным, необходимо повторно выполнить поиск swap-юнитов. systemd мог сгенерировать новый юнит для того же устройства. Его также необходимо замаскировать.
Дата последнего изменения: 16.04.2026
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.