Добавление пространства подкачки (swap) в Ubuntu

3 декабря 2025 г.
mrx
7 мин чтения

Добавление пространства подкачки (swap) в Ubuntu

Пространство подкачки (swap) - это часть жесткого диска или SDD, предназначенная для временного хранения данных операционной системой. Данные или информация, которые ОС не может разместить в оперативной памяти, хранятся в пространстве подкачки. Оно полезно при повышенной нагрузке на оперативную память.

Проверить, есть ли в Ubuntu свободное место подкачки, можно с помощью следующей команды.

bash
sudo swapon --show

Вы должны получить результат, если место подкачки доступно, в противном случае вы не получите никакого результата. Посмотреть, что нет активного swap можно, используя команду free:

bash
free -h
bash
Output         total        used       free        shared      buff/cache  available
Mem:           488M         36M        104M        652K        348M        426M
Swap:            0B          0B          0B

Теперь вы можете создать swap из доступного пространства на HDD или SDD. Выполните следующую команду, чтобы узнать, есть ли свободное место или нет.

bash
df -h
text
OutputFilesystem      Size  Used Avail Use% Mounted on
udev                  238M    0  238M   0% /dev
tmpfs                 49M  624K   49M   2% /run
/dev/vda1             20G  1.1G   18G   6% /
tmpfs                245M     0  245M   0% /dev/shm
tmpfs                5.0M     0  5.0M   0% /run/lock
tmpfs                245M     0  245M   0% /sys/fs/cgroup
tmpfs                 49M     0   49M   0% /run/user/1001

Устройство dev это наш диск в данном случае. На нем видим достаточно места, доступного в этом примере (только 1,1G используется).

Выполним следующую команду для создания файла подкачки.

bash
sudo fallocate -l 1G /swapfile

Вы можете проверить, что было зарезервировано нужное количество места, набрав:

bash
ls -lh /swapfile
bash
-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

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

bash
sudo chmod 600 /swapfile

Проверьте изменение разрешений, набрав:

bash
ls -lh /swapfile
text
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

Только у пользователя root включены флаги чтения и записи.

Теперь выполните следующую команду, чтобы изменить файл как место подкачки, набрав:

bash
sudo mkswap /swapfile
text
OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

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

bash
sudo swapon /swapfile

Вы можете убедиться, что место подкачки доступно, выполнив следующую команду:

bash
sudo swapon --show
text
OutputNAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -1

Мы можем проверить результаты командой free :

bash
free -h
text
Output              total        used        free      shared  buff/cache   available
Mem:           488M         37M         96M        652K        354M        425M
Swap:          1.0G          0B        1.0G

Сделать файл swap постоянным

Сделаем копию файла /etc/fstab

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

Добавляем информацию о swap файле в конец /etc/fstab файл с помощью команды:

bash
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Тонкая настройка swap

Существует несколько опций, которые могут влиять на производительность системы при работе swap.

Параметр swappiness задает частоту использования системой swap-пространства. Значение swappiness выражается числом от 0 до 100, которое выражает проценты. Если это значение близко к нулю, ядро не будет передавать данные в swap без крайней необходимости. Помните, взаимодействие со swap-файлом «дорого обходится» серверу, поскольку требует больше ресурсов, чем взаимодействие с оперативной памятью, что, следовательно, может привести к значительному снижению производительности. Система, как правило, работает продуктивнее, если не очень полагается на swap.

Если значение swappiness ближе к 100, система будет передавать в swap большое количество данных с целью сохранить больше свободного места в RAM. В зависимости от профиля памяти приложения и цели использования сервера, это может быть лучше в некоторых случаях.

Чтобы просмотреть текущее значение swappiness, введите:

bash
cat /proc/sys/vm/swappiness 60

В целом, значение 60 не так уж плохо, но для системы виртуального выделенного сервера лучше установить значение, которое ближе к 0.

Чтобы изменить значение swappiness, используйте команду sysctl.

К примеру, чтобы установить значение 10, нужно набрать:

bash
sudo sysctl vm.swappiness=10 vm.swappiness = 10

Данное значение будет действительным до следующей перезагрузки. Чтобы значение сохранялось и после перезагрузки сервера, откройте файл /etc/sysctl.conf в текстовом редакторе:

bash
sudo nano /etc/sysctl.conf

и внесите в него следующую строку:

bash
vm.swappiness=10

Затем сохраните и закройте файл.

Еще одна важная опция – это vfs_cache_pressure. Этот параметр управляет склонностью ядра восстанавливать память, которая используется для кэширования каталогов и инодов объектов.

В основном, это данные доступа к файловой системе. Как правило, найти их не так просто, а запрашиваются они часто, так что использовать кэш-память в этом случае очень удобно. Узнать текущее значение этого параметра можно, снова запрашивая файловую систему proc:

bash
cat /proc/sys/vm/vfs_cache_pressure 100

Согласно текущим настройкам, система удаляет иноды из кэша слишком быстро. Установив меньшее значение (например, 50), система будет хранить информацию дольше:

bash
sudo sysctl vm.vfs_cache_pressure=50 vm.vfs_cache_pressure = 50

Опять же, это значение действительно только для текущей сессии. Чтобы сделать его постоянным, нужно (как и в случае со swappiness) открыть конфигурационный файл sysctl в текстовом редакторе:

bash
sudo nano /etc/sysctl.conf

и внести в него строку:

bash
vm.vfs_cache_pressure = 50

Сохраните и закройте sysctl.