Создание файла подкачки в Linux VM

Небольшая заметка о том, как подключить и отключать файл подкачки в Linux.

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

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

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

Создание и подключение swapfile

Далее, рассмотрим пример с созданием swap-файла размером 1Gb, часто рекомендуют создавать swap такого-же или чуть большего объема как и ОЗУ на виртуальной машине. Обычно, это нужно для сна/гибернации, но в нашем варианте это не имеет значения. Поэтому я обычно (это быстрее, но менее надежно) создаю своп размером 1-4 гб, ориентируясь на нагрузку в других установках + размер доступного пространства на жестком диске.

Создаем swap-файл:

sudo fallocate -l 1G /swapfile

Если на ВМ не установлен fallocate, можно создать файл коммандой dd:

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

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

sudo chmod 600 /swapfile

С помощью утилиты mkswap сделаем созданный файл swap-файлом и включим его с помощью swapon

sudo mkswap /swapfile
sudo swapon /swapfile

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

/swapfile swap swap defaults 0 0
/etc/fstab

Проверим что все работает утилитами swapon и free

$ sudo swapon --show
NAME      TYPE  SIZE   USED PRIO
/swapfile file 1024M 507.4M   -1

$ sudo free -h
              total        used        free      shared  buff/cache   available
Mem:           2.0G        158M         83M        2.3M        246M        217M
Swap:          1.0G        506M        517M

Как настроить значение swappiness

Swappiness - это свойство ядра Linux, которое определяет, как часто система будет использовать область подкачки. Значение swappiness может быть от 0 до 100. Низкое значение заставит ядро стараться избегать подкачки при возможности, в то время как более высокое значение заставит ядро более активно использовать область подкачки.

Значение swappiness по умолчанию равно 60. Вы можете проверить текущее значение swappiness, введя следующую команду:

$ cat /proc/sys/vm/swappiness

60

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

Например, для установки значения swappiness равным 10 выполните следующую команду sysctl:

sudo sysctl vm.swappiness=10

Иногда я предпочитаю ставить в продакшене это значения в районе 40, чтобы чуть больше уходило в своп. Но, опять же, все зависит от вашей конкретной конфигурации и нагрузок.

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

vm.swappiness=10

Как удалить файл подкачки

Если по какой-либо причине вы хотите отключить и удалить файл подкачки, выполните следующие шаги:

  1. Отключение swap-файла
sudo swapoff -v /swapfile

2. Удалите запись файла подкачки /swapfile swap swap defaults 0 0 из файла /etc/fstab.

3. Удалите сам файл подкачки:

sudo rm /swapfile

Теги: Linux, Kubernetes

Комментарии ()