Один из способов подстраховать сервер, сделать его более устойчивым к нагрузкам и защититься от ошибок нехватки памяти — добавить пространство подкачки т.е. речь идет о системе свопинга.
Своп (от английского swap) — область на накопителе, где операционная система может временно хранить данные, которые уже не держит в оперативной памяти. Swap, файл подкачки, механизм виртуальной памяти перемещающий отдельные фрагменты памяти из оперативной памяти на жёсткий диск, внешний накопитель, специально выделенный раздел или файл, тем самым выполняя своё предназначение и освобождая оперативную память для других активных фрагментов памяти.
Файл подкачки дает возможность увеличить объем информации, которую сервер может хранить в рабочей памяти. Но, с некоторыми оговорками. Чтение и запись в раздел подкачки медленнее, чем при использовании памяти, но это может поддержать, когда на сервере недостаточно оперативной памяти.
Без подкачки, в момент нехватки памяти, сервер может начать завершать процессы, чтобы освободить память, или даже аварийно завершить работу. Это может привести к потере данных или возникновению простоев.
- Проверка системы на наличие свопа
- Проверка доступного места для обмена
- Создание файла подкачки
- Подключение файла подкачки сразу
- Подключение файла подкачки после загрузки системы
- Отключить и удалить своп файл
Проверка системы на наличие и использование свопа
Прежде чем приступить, нужно проверить сводную информацию об использовании и доступности подкачки на устройстве хранения. С помощью команды swapon:
$ swapon -s
Если команда ничего не возвращает, значит файла подкачки не существует. В обратном случае, в терминал будет выведено нечто подобное:
$ swapon -s
Имя файла Тип Размер Исп-но Приоритет
/dev/dm-0 partition 5862396 0 -2
то же самое, с выводом полного пути к файлу свопа, но вывести из содержания файла swaps:
$ cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-0 partition 5862396 0 -2
Утилита free отобразит текущее использование памяти и подкачки:
$ free -m
всего занято свободно общая буф./врем. доступно
Память: 5553 3701 415 293 1437 1306
Подкачка: 0 0 0
Проверка доступного место для обмена и хранения данных
Важно убедится в наличии доступного места на носителе:
$ df -h
Файл.система Размер Использовано Дост Использовано% Cмонтировано в
/dev/mapper/centos-root 29G 3,6G 26G 13% /
devtmpfs 484M 3,4M 484M 0% /dev
tmpfs 496M 3,4M 496M 0% /dev/shm
tmpfs 496M 3,4M 489M 2% /run
tmpfs 496M 3,4M 496M 0% /sys/fs/cgroup
/dev/sda1 1014M 132M 883M 13% /boot
tmpfs 100M 0 100M 0% /run/user/0
Для использования еще доступно 26G и этого достаточно.
Создать файла подкачки
Создать 1-гигабайтный файл подкачки указанного размера используя команду fallocate:
$ sudo fallocate -l 1G /my-swap-file
С помощью ls можно убедится в его наличии и в достаточном количестве зарезервированного пространства:
$ ls -lh /my-swap-file
-rw-r--r-- 1 root root 1.0G янв 4 11:00 /my-swap-file
Подключение файла подкачки
Файл уже создан, но система еще не знает, что он должен использоваться для хранения и обмена. Нужно отформатировать этот файл как swap, а затем включить его. Но прежде, должны быть настроены права доступа, чтобы файл мог быть прочитан, только учетной записью root. Разрешение другим пользователям читать или писать в этот файл, было бы большой угрозой безопасности. Ограничиваются разрешения с помощью chmod:
$ sudo chmod 600 /my-swap-file
Проверить, что у файла подкачки правильные разрешения, снова используя ls:
$ ls -lh /my-swap-file
-rw------- 1 root root 1.0G янв 4 11:00 /my-swap-file
Теперь, файл подкачки стал более безопасным и можно указать системе пространство подкачки:
Указывается файл подкачки командой mkswap
$ sudo mkswap /my-swap-file
Setting up swapspace version 1, size = 10848572 KiB
no label, UUID=bb94e86e-c1d2-4b5a-8cc2-fdffd2078d7e
Сразу включить файл подкачки
Файл подкачки готов к работе в качестве пространства подкачки, для его использования набрать:
$ sudo swapon /my-swap-file
В данный момент файл подкачки включен и при необходимости используется. После перезагрузки сервер должен автоматически включать для использования файл свопа. На подключение укажет строка дописанная в таблицу управляющую файловыми системами и разделами в файле fstab.
На этом этапе, есть вероятность получить следующую ошибку swapon failed: Invalid argument:
$ sudo swapon /my-swap-file
swapon: swapfile has holes
swapon: /my-swap-file: swapon failed: Invalid argument
Пишет, что недопустимый аргумент, в этом случае поможет это CentOS 7 — swapon failed: Invalid argument решение.
Подключение файла подкачки после загрузки системы
Чтобы файл подключался во время загрузки системы, в файл fstab
$ sudo nano /etc/fstab
в нижней части, нужно добавить строку, указывающую операционной системе использовать файл подкачки автоматически:
/my-swap-file swap swap sw 0 0
Система проверяет эту таблицу во время каждого запуска и файл подкачки будет готов к использованию. Осторожно с форматированием, таблица довольно чувствительна.
Отключить и удалить своп файл
Шаг 1. Отключить файл подкачки:
$ sudo swapoff -v /my-swap-file
Шаг 2. Удалить строку из таблицы fstab:
$ sudo nano /etc/fstab
Шаг 3. Удалить своп файл:
$ sudo rm /my-swap-file
Подтвердить удаление и его не станет.