2.3.3 Область подкачки (swap)
Основные понятия
Типы памяти в Linux
Принципы работы swap
Типы организации swap
Параметр swappiness
Zram и zswap
Zram
Zswap
Рекомендуемый объем swap
Настройка swap в РЕД ОС
Проверка текущей конфигурации
Создание файла подкачки
Настройка автоматического подключения файла подкачки
Отключение файла подкачки
Отключение раздела подкачки
Окружение
- Версия ОС: 7.3
- Конфигурация ОС: Рабочая станция, Сервер графический, Сервер минимальный
- Редакция ОС: Стандартная
Подкачка (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/dm-1 partition 3,9G 0B -2
где /dev/dm-1 — раздел подкачки.
Создание файла подкачки
Для создания файла подкачки выполните следующие действия:
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/dm-1 partition 3,9G 118,4M -2
/swapfile file 4G 0B -3
Отключение файла подкачки
Для отключения файла подкачки выполните следующие действия:
1. Проверьте используемые swap-устройства и файлы:
sudo swapon --show
Из вывода команды необходимо запись о подкачке типа file и путь до этого файла, их может быть несколько.
NAME TYPE SIZE USED PRIO /dev/dm-1 partition 3,9G 118,4M -2 /swapfile file 4G 0B -3
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
│ ext4 1.0 8da659be-47b9-498f-8406-0e7faf8560fa 664,8M 25% /boot
└─sda2
LVM2_m LVM2 Bd7iR2-mOhS-46eu-cjJ4-xMlu-GCxC-KVdLVa
├─ro_redos-root
│ ext4 1.0 440aea61-4ef1-4d91-8b7e-c0430f5d6916 19G 39% /
└─ro_redos-swap
swap 1 1598d841-43d8-43fb-b3cf-29f1b8984f48 [SWAP]
В данном примере разделом подкачки является LVM-устройство ro_redos-swap.
2. Остановите использование раздела подкачки (в примере ro_redos-swap):
sudo swapoff /dev/mapper/ro_redos-swap
Раздел подкачки будет отключен.
3. Отключите автоматическое подключение раздела после перезагрузки. Для этого закомментируйте соответствующую строку в файле /etc/fstab:
sudo nano /etc/fstab
Найдите строку с UUID или именем устройства раздела подкачки (/dev/mapper/ro_redos-swap) и закомментируйте её, добавив # в начало строки.
Пример строки после редактирования:
# /dev/mapper/ro_redos-swap none swap defaults 0
Сохраните изменения (Ctrl + S, затем Ctrl + X).
4. Проверьте существующие службы подкачки и отключите нужную. Сначала выполните команду для просмотра всех доступных служб:
systemctl list-unit-files --type=swap --all
Найдите в списке службу подкачки, соответствующую вашему разделу.
Затем проверьте статус этой службы:
systemctl status 'dev-mapper-ro_redos\x2dswap.swap'
Одинарные кавычки нужны для обработки специальных символов в имени службы.
Пример вывода до маскировки:
○ dev-mapper-ro_redos\x2dswap.swap - /dev/mapper/ro_redos-swap
Loaded: loaded (/etc/fstab; generated)
Active: inactive (dead) since Tue 2026-04-07 11:43:03 MSK; 13min ago
What: /dev/mapper/ro_redos-swap
Docs: man:fstab(5)
man:systemd-fstab-generator(8)
CPU: 4ms
апр 07 11:43:03 localhost.localdomain systemd[1]: dev-mapper-ro_redos\x2dswap.swap: Deactivated successfully.
где Loaded: loaded означает, что маскировка не применена.
Отключите службу systemd для раздела подкачки:
sudo systemctl mask 'dev-mapper-ro_redos\x2dswap.swap'
Пример вывода:
Created symlink /etc/systemd/system/dev-mapper-ro_redos\x2dswap.swap → /dev/null.
Проверьте статус службы после маскировки.
systemctl status 'dev-mapper-ro_redos\x2dswap.swap'
Пример вывода после маскировки:
○ dev-mapper-ro_redos\x2dswap.swap
Loaded: masked (Reason: Unit dev-mapper-ro_redos\x2dswap.swap is masked.)
Active: inactive (dead) since Tue 2026-04-07 11:43:03 MSK; 13min ago
CPU: 4ms
апр 07 11:43:03 localhost.localdomain systemd[1]: dev-mapper-ro_redos\x2dswap.swap: Deactivated successfully.
где Loaded: masked означает, что маскировка применена успешно.
5. Перезагрузите компьютер:
reboot
6. Проверьте используемые пространства подкачки:
sudo swapon --show
В выводе команды swapon --show не должно быть записи об отключенном дисковом разделе подкачки.
Дата последнего изменения: 16.04.2026
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.