Один из способов подстраховать сервер, сделать его более устойчивым к нагрузкам и защититься от ошибок нехватки памяти – добавить пространство подкачки т.е. речь идет о системе свопинга.
Своп (от английского 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 — 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
Подтвердить удаление и его не станет.