Что такое swap в Linux, зачем он нужен и как его настроить

Что такое swap в Linux, зачем он нужен и как его настроить
0
32

Если оперативная память Linux-сервера заканчивается, приложения могут начать тормозить или неожиданно закрываться. Чтобы снизить риск таких проблем, система использует swap — дополнительное пространство для временного хранения данных из оперативной памяти. Разберём, как работает подкачка, когда она действительно полезна и как проверить, создать или настроить swap в Linux.

Что такое swap в Linux простыми словами

Swap (своп, или подкачка) — это специальное пространство, в котором Linux может временно хранить часть данных из оперативной памяти (RAM). Обычно оно находится на SSD или жёстком диске, хотя существуют и варианты со сжатием данных непосредственно в RAM.

Представим небольшой сервер интернет-магазина. На нём работают сайт, база данных и несколько фоновых программ. Для выполнения задач им нужна оперативная память, но её объём ограничен. Если нагрузка резко вырастет, например во время распродажи, памяти может не хватить.

Linux умеет освобождать часть RAM, перемещая редко используемые данные в swap. Когда приложению снова понадобится эта информация, система сможет вернуть её в оперативную память. Так появляется дополнительный запас для работы программ.

Но swap не заменяет настоящую RAM. Даже быстрый SSD обычно значительно медленнее оперативной памяти, поэтому постоянное обращение к подкачке может замедлять сервер. Её задача — помогать системе управлять памятью и переживать временные перегрузки, а не увеличивать производительность за счёт диска.

Как работает swap в Linux

Чтобы понять принцип, представим рабочий стол, на котором лежат документы. Те, которыми вы пользуетесь постоянно, удобно держать под рукой. А папки, которые открываете раз в месяц, можно убрать в шкаф и доставать по необходимости.

Оперативная память похожа на рабочий стол: доступ к данным очень быстрый, но места ограничено. Swap напоминает шкаф, в который можно временно убрать часть информации. Когда она понадобится, её придётся вернуть обратно, а это займёт дополнительное время.

В Linux всё происходит автоматически. Система отслеживает использование памяти и при необходимости выбирает данные, которые можно переместить. Обычно речь идёт о небольших блоках — страницах памяти, а не о переносе целой программы на диск.

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

При этом сама по себе занятая подкачка ещё не означает проблему. Например, Linux может оставить в swap давно неиспользуемые страницы памяти, даже если позднее свободной RAM стало больше.

Схема работы swap в Linux: редко используемые страницы памяти перемещаются из RAM в swap на диске и возвращаются при необходимости.

Что происходит, когда памяти действительно не хватает

Допустим, у сервера 4 ГБ RAM и дополнительно настроен swap-файл на 2 ГБ. Программы постепенно увеличивают потребление памяти, а свободных ресурсов становится всё меньше.

Linux пытается освободить RAM: может уменьшить файловый кеш или переместить подходящие страницы памяти в swap. Но если приложения постоянно требуют всё больше ресурсов, подкачка тоже перестанет справляться.

В такой ситуации система может начать тратить слишком много времени на перемещение данных между RAM и диском. Это называют thrashing. Сервер становится медленным, а выполнение обычных операций занимает заметно больше времени.

Если доступной памяти всё равно не хватает, Linux может запустить механизм OOM Killer (Out of Memory Killer). Он завершает выбранный процесс, чтобы освободить ресурсы. Поэтому swap иногда помогает избежать аварийного завершения программ, но не гарантирует защиту от него.

Когда нужен swap в Linux

Swap может пригодиться и на обычном компьютере, и на рабочем сервере. Особенно полезен он там, где потребление памяти иногда ненадолго превышает привычный уровень.

Например, его используют в следующих ситуациях:

  • Небольшой VPS. Если на сервере с 2–4 ГБ RAM одновременно работают сайт и несколько служб, swap может помочь пережить кратковременный рост нагрузки.
  • Сборка приложений. При компиляции больших проектов или выполнении отдельных задач CI/CD потребление памяти иногда резко увеличивается.
  • Рабочий компьютер. Несколько браузеров, редактор кода, контейнеры и другие приложения могут занимать больше RAM, чем обычно.
  • Гибернация ноутбука. При переходе в этот режим Linux сохраняет состояние оперативной памяти, чтобы затем восстановить работу. Для этого требуется правильно настроенное пространство хранения и механизм возобновления системы.

При этом swap нужен далеко не каждому серверу в одинаковом объёме. Например, если приложение постоянно использует почти всю доступную память и непрерывно обращается к диску, дополнительный swap может лишь отложить проблему.

Для рабочих проектов важно учитывать характер нагрузки. Сервер с базой данных, виртуальная машина для тестирования и домашний ноутбук могут требовать совершенно разных настроек памяти.

Swap-файл и swap-раздел: в чём разница

В Linux подкачку можно организовать несколькими способами. Два основных варианта — специальный файл и отдельный раздел диска.

Swap-файл (swap file) — обычный по расположению файл, который Linux использует как область подкачки. Его удобно создавать, увеличивать или удалять без изменения разметки диска. Поэтому для небольшого VPS или учебной виртуальной машины такой вариант часто оказывается проще.

Swap-раздел (swap partition) — отдельный раздел накопителя, подготовленный специально для подкачки. Его можно настроить ещё при установке Linux, но менять размер раздела обычно сложнее, чем размер отдельного файла.

КритерийSwap-файлSwap-раздел
Где находитсяВ файловой системеНа отдельном разделе диска
СозданиеОбычно не требует переразметки дискаТребуется отдельный раздел
Изменение размераОбычно прощеМожет потребоваться изменение разделов
ПрименениеСерверы, VPS, рабочие компьютерыСистемы с заранее спланированной разметкой

Для большинства базовых сценариев нет необходимости специально создавать раздел, если подходящий swap-файл уже настроен.

Есть и другие решения, например zram и zswap. Они используют сжатие данных в оперативной памяти и помогают уменьшить обращения к диску. К ним вернёмся позже.

Как проверить swap в Linux

Прежде чем создавать подкачку, стоит выяснить, есть ли она уже в системе. Это особенно важно на VPS: провайдер или установщик операционной системы мог заранее настроить swap-файл, раздел или zram.

Проверка оперативной памяти через free

Откройте терминал Linux и выполните:

free -h

Команда покажет объём оперативной памяти и swap в удобном формате.

Например, результат может выглядеть так:

               total   used   free   shared  buff/cache  available
Mem:           7.7Gi  6.1Gi  410Mi    100Mi       1.2Gi      1.1Gi
Swap:          2.0Gi  340Mi  1.7Gi

Это условные значения, приведённые для объяснения.

Строка Mem относится к оперативной памяти, а Swap — к подкачке. В нашем примере система располагает 2 ГБ swap, из которых используются примерно 340 МБ.

Обратите внимание на столбец available в строке RAM. Он показывает, сколько памяти система оценивает как доступную для новых приложений без необходимости задействовать подкачку. Этот показатель обычно полезнее, чем просто free, поскольку Linux использует часть свободной RAM для кеширования файлов.

Если в строке Swap значение total равно нулю, активное пространство подкачки не обнаружено.

Интерфейс системного монитора Ubuntu с показателями использования оперативной памяти и swap.
В графическом системном мониторе Ubuntu можно посмотреть использование оперативной памяти и подкачки без команд терминала.

Проверка swap-файлов и разделов

Чтобы узнать, где именно находится подкачка, выполните:

swapon --show

Команда выводит список активных областей swap. Например:

NAME       TYPE  SIZE  USED PRIO
/swapfile  file    2G  340M   -2

Здесь видно, что система использует файл /swapfile размером 2 ГБ. Столбец USED показывает занятую часть, а PRIO — приоритет этой области подкачки, если в системе их несколько.

Вместо файла может отображаться раздел диска, например /dev/sda3, или устройство /dev/zram0, если применяется подкачка со сжатием в RAM.

Если команда ничего не вывела, активных областей swap нет. Но перед созданием новой подкачки всё равно стоит проверить настройки системы, чтобы не дублировать существующую конфигурацию.

Как узнать, тормозит ли сервер из-за swap

Количество занятого swap не всегда помогает понять, есть ли реальная проблема. Для этого полезно посмотреть, как активно система переносит данные между RAM и подкачкой.

Выполните:

vmstat 1 5

Команда покажет пять измерений с интервалом в одну секунду. Нас интересуют два столбца: si и so.

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

Если во время работы сервера значения si и so постоянно высокие, а приложения заметно тормозят, это повод проверить нагрузку на память и диск.

Небольшой объём занятого swap сам по себе не требует вмешательства.

Как создать swap-файл в Linux: пошаговая инструкция

Разберём создание файла подкачки размером 2 ГБ на Ubuntu, Debian или другом Linux-дистрибутиве с подходящей файловой системой ext4 либо XFS.

Это пример для учебного сервера или виртуальной машины. На рабочем сервере сначала проверьте настройки памяти и наличие swap, а также убедитесь, что можете восстановить систему при ошибке.

Проверьте файловую систему и свободное место

Узнать тип файловой системы можно командой:

findmnt -no FSTYPE /

Для нашего примера подойдут ext4 и XFS. Если используется Btrfs, не применяйте следующие команды без изменений: для неё предусмотрен отдельный способ создания swap-файла.

Теперь проверьте свободное пространство на диске:

df -h /

Для файла на 2 ГБ понадобится соответствующее свободное место. Желательно оставить запас для операционной системы, журналов и приложений.

Также убедитесь, что файл /swapfile ещё не существует и не используется системой. Перезаписывать действующий swap-файл нельзя.

Создайте swap-файл

Для выделения места воспользуемся командой:

sudo fallocate -l 2G /swapfile

Она создаёт файл /swapfile размером 2 ГБ.

Затем ограничим доступ к нему:

sudo chmod 600 /swapfile

Так читать и изменять файл сможет только его владелец — обычно root. Это важно, поскольку в подкачке могут оказаться данные работающих приложений, в том числе конфиденциальная информация.

Подготовьте файл для подкачки

Теперь выполните:

sudo mkswap /swapfile

Команда подготавливает файл для использования Linux в качестве swap. После выполнения она должна показать сведения о созданной области подкачки.

На этом этапе файл ещё не задействован системой. Мы только подготовили его для работы.

Включите swap

Активируйте созданный файл:

sudo swapon /swapfile

Теперь Linux сможет использовать его для подкачки.

Проверьте результат двумя командами:

swapon --show
free -h

В списке активных областей должна появиться запись /swapfile размером 2 ГБ, а в строке Swap команды free -h увеличится общий доступный объём подкачки.

Если в столбце USED пока указан ноль, это нормально. Система не обязана сразу переносить данные в новый swap-файл.

Терминал Ubuntu с командами fallocate, chmod, mkswap, swapon и проверкой swap-файла размером 2 ГБ.
Пример создания swap-файла в Ubuntu и проверки его размера через терминал.

Сохраните настройки после перезагрузки

Пока мы включили подкачку только для текущей работающей системы. Чтобы файл автоматически активировался после следующей загрузки Linux, нужно добавить его в /etc/fstab.

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

sudo cp /etc/fstab /etc/fstab.bak

Затем откройте его:

sudo nano /etc/fstab

Добавьте строку, если такой записи ещё нет:

/swapfile none swap defaults 0 0

Сохраните файл. В Nano это можно сделать через Ctrl+O, подтверждение Enter и Ctrl+X для выхода.

На системах с systemd перечитайте конфигурацию:

sudo systemctl daemon-reload

Теперь swap-файл будет учитываться при загрузке системы. После плановой перезагрузки проверьте его состояние командой swapon —show.

Не добавляйте одну и ту же запись несколько раз. Если swap уже настроен в /etc/fstab, проверьте существующие параметры перед изменением файла.

★ Где этому научиться

Курс «Основы администрирования Linux» в Академии IT DMS

✓Ubuntu Server, командная строка и Bash-скрипты
✓Права доступа, процессы и свой VPN-сервер в облаке
✓Виртуализация KVM, Docker и защита сервера с iptables

Сертификат или удостоверение о повышении квалификации.

Перейти к курсу →ПромокодAFFTIMES

−5 % на первую покупку. Скидка суммируется с любыми акциями школы. Если оплачиваете через менеджера в чате, назовите ему промокод.

Какой размер swap выбрать для Linux

Единого размера, который подойдёт любому серверу, нет. Он зависит от доступной RAM, выполняемых задач, характера нагрузки и необходимости гибернации.

Например, если на небольшом VPS с 4 ГБ оперативной памяти иногда возникают кратковременные скачки нагрузки, можно начать с swap-файла на 2 ГБ и наблюдать за использованием памяти.

Но если этот VPS постоянно обращается к подкачке и приложения тормозят, увеличение файла до 8 ГБ может не решить проблему. Возможно, серверу действительно требуется больше оперативной памяти или оптимизация приложений.

Раньше часто советовали делать swap в два раза больше RAM. Сейчас такое правило слишком грубое: сервер с 2 ГБ памяти и рабочая станция с 64 ГБ требуют разных подходов.

Для гибернации также действуют особые условия. Размер swap должен соответствовать объёму данных, необходимых для сохранения состояния системы, а механизм восстановления должен быть отдельно настроен. Простого создания большого swap-файла для этого недостаточно.

Поэтому размер лучше выбирать по наблюдаемой нагрузке, а не только по количеству установленной RAM.

Что такое swappiness и нужно ли его менять

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

Посмотреть текущее значение можно командой:

cat /proc/sys/vm/swappiness

Или так:

sysctl vm.swappiness

В документации ядра Linux стандартное значение указано как 60, а допустимый диапазон — от 0 до 200. При этом конкретный дистрибутив или администратор может использовать другие настройки.

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

Иногда советуют обязательно поставить swappiness=10 или даже 0, чтобы Linux меньше обращался к диску. Но универсального значения нет. Например, для zram или zswap, где данные сжимаются в оперативной памяти, могут быть полезны настройки выше 100.

Если вы хотите проверить другое значение, временно изменить его можно так:

sudo sysctl vm.swappiness=20

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

При этом значение 0 не означает полного отключения swap. Если вы хотите действительно отключить подкачку, для этого существуют отдельные команды, но на рабочем сервере применять их без предварительной проверки опасно.

Как очистить swap в Linux и почему с этим нужно быть осторожнее

Иногда администратор видит, что занята часть swap, хотя свободной RAM уже достаточно, и пытается очистить её.

Это не всегда нужно. Linux может хранить в swap редко используемые данные, чтобы не занимать ими оперативную память. Если постоянных обращений к подкачке нет, такое состояние обычно не мешает работе.

Для отключения конкретного swap-файла существует команда:

sudo swapoff /swapfile

Но она не просто очищает счётчик использования. Linux должен вывести данные из отключаемой области подкачки, в том числе вернуть необходимые страницы в RAM.

Если свободной памяти недостаточно, операция может завершиться ошибкой или усугубить нехватку памяти. На загруженном VPS это способно привести к серьёзным проблемам, вплоть до завершения процессов.

Поэтому не стоит бездумно выполнять распространённую комбинацию swapoff -a и swapon -a только ради того, чтобы увидеть ноль в статистике. Сначала убедитесь, что действительно есть проблема, и проверьте её причину.

Если нужно удалить swap-файл окончательно, это делают в запланированное время: проверяют доступную память, отключают конкретную область подкачки, убирают запись из /etc/fstab и только после успешного отключения удаляют файл.

Чем отличаются swap, zram и zswap

В современных Linux-системах подкачка не всегда означает запись данных на SSD.

Обычный swap хранит страницы памяти в файле или разделе накопителя. Это позволяет освободить RAM, но обращение к диску медленнее работы с оперативной памятью.

zram создаёт специальное устройство в RAM, в котором данные хранятся в сжатом виде. Оно использует процессор для сжатия и распаковки, зато позволяет более эффективно расходовать оперативную память без обязательной записи на накопитель.

zswap работает как сжатый кеш для страниц, отправляемых в swap. Он пытается сохранить их в сжатом виде в RAM, а при определённых условиях может передавать данные в основную область подкачки.

РешениеГде хранятся данныеОсобенность
Swap-файл или разделНа накопителеДополнительный запас памяти, но обращения к диску могут замедлять работу
zramВ сжатом виде в RAMЭкономит память за счёт сжатия
zswapСначала в сжатом кеше RAMМожет уменьшать число обращений к дисковому swap

Если команда swapon —show показывает /dev/zram0, это означает, что система использует виртуальное устройство zram. Создавать поверх него ещё один swap-файл без анализа конфигурации необязательно.

Отдельно стоит учитывать файловую систему Btrfs. Swap-файлы на ней поддерживаются, но требуют специальных условий, в частности отключения copy-on-write для файла. В современных версиях Btrfs для создания подходящего файла предусмотрена команда btrfs filesystem mkswapfile. Обычную инструкцию с fallocate для ext4 нельзя автоматически переносить на любую файловую систему.

Когда swap не поможет серверу

Swap особенно полезен при временных скачках потребления памяти. Но если приложение постоянно требует больше ресурсов, чем способен предоставить сервер, подкачка может превратиться в источник задержек.

Например, если база данных регулярно использует почти всю оперативную память, а сервер постоянно читает данные из swap и записывает их обратно, стоит проверить настройки базы, количество одновременных запросов и объём RAM.

При работе с Docker и другими контейнерными технологиями есть ещё один нюанс: контейнеры могут иметь собственные ограничения памяти. Даже если на хосте есть свободная RAM или swap, приложение внутри контейнера может столкнуться с установленным лимитом и завершиться.

Поэтому при диагностике полезно соблюдать последовательность: сначала проверить использование RAM и swap через free -h, затем посмотреть активные области с помощью swapon —show, оценить текущий обмен данными через vmstat и выяснить, какие процессы потребляют больше всего памяти.

Если система постоянно испытывает нехватку ресурсов, обычно приходится искать причину в приложениях, настройках или размере сервера. Увеличивать swap без такой проверки — не самое надёжное решение.

FAQ

Что такое swap в Linux?

Swap — это пространство для временного хранения страниц оперативной памяти. Обычно оно находится в специальном файле или разделе диска и помогает Linux освобождать RAM.

Нужен ли swap, если оперативной памяти достаточно?

Swap может быть полезен как запас при кратковременной нехватке памяти. Linux иногда использует подкачку даже при наличии свободной RAM.

Как проверить swap в Linux?

Команда free -h показывает общий и используемый объём swap. Команда swapon --show выводит список активных областей подкачки.

Как создать swap-файл в Ubuntu?

На подходящей файловой системе создайте файл через fallocate, задайте права chmod 600, выполните mkswap и активируйте его командой swapon. Для автоматической активации после перезагрузки добавьте запись в /etc/fstab.

Как очистить swap в Linux?

Для отключения конкретной области swap применяется команда swapoff, но перед её использованием необходимо проверить доступную оперативную память. Просто занятый swap обычно не требуется очищать.

Можно ли отключить swap в Linux?

Да. Однако без swap при недостатке RAM система может раньше столкнуться с ошибками выделения памяти и завершением процессов. Решение зависит от нагрузки сервера.

Валерия Шлегель
Валерия Шлегель
Автор
(Проголосовать за статью)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

X