Создание файла подкачки в 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
:
Проверим что все работает утилитами 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
Как удалить файл подкачки
Если по какой-либо причине вы хотите отключить и удалить файл подкачки, выполните следующие шаги:
- Отключение swap-файла
sudo swapoff -v /swapfile
2. Удалите запись файла подкачки /swapfile swap swap defaults 0 0
из файла /etc/fstab
.
3. Удалите сам файл подкачки:
sudo rm /swapfile
Теги: Linux, Kubernetes