SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накопитель).
В ОС Linux оперативная память (ОЗУ, RAM, random access memory) делится на разделы, называемые страницами (pages). Swapping (”подкачка”, своппинг) – это процесс во время которого страницы памяти копируются на специально сконфигурированный для этого раздел диска, называемый swap space (раздел подкачки, может быть как и файлом, так и разделом жесткого диска), для освобождения ОЗУ. Совокупные размеры физической памяти и раздела подкачки – это объем имеющийся виртуальной памяти.
Своппинг необходим по следующим причинам:
- когда системе необходимо больше памяти (т.е. приложение или процесс запрашивает у системы больше памяти) чем сейчас свободно в ОЗУ, ядро разгружает (”откачивает”) наименее используемые страницы и освобожденную память выделяет текущему приложению или процессу.
- значительное количество страниц используемых программами на стадии запуска, используются только при инициализации и никогда более. Соответственно система может засвопить эти страницы, тем самым освобождая (разгружая) ОЗУ.
Недостатки SWAP:
- По сравнению с ОЗУ, работа с жестким диском осуществляется намного медленнее. Для оценки временных затрат на чтение/запись в ОЗУ используются наносекунды, в то время как для жесткого диска используются миллисекунды, т.е. одни и теже операции на жестком диске занимают в десятки тысяч больше времени чем в ОЗУ. Следовательно чем больше страниц своппится, тем медленнее работает ваша система.
Зачастую, от недостатка свободной памяти первой страдает база данных. Вы можете сталкиваться с проблемами типа:
- Постоянное падение сайта: Ошибка соединения с базой данных — означает, например, что MySQL упал;
- При изучении логов /var/log/mysql.log обнаруживается ошибка InnoDB: Fatal error: cannot allocate memory for the buffer pool. Она свидетельствует о том, что базе данных не хватает выделенной ей оперативной памяти для создания буфера.
Если файл или раздел свопа хранится на SSD, нужно понимать что поиск и чтение данных происходит через оперативную память, что, в свою очередь, всё равно увеличивает время отклика.
Поэтому, если Вы сталкиваетесь с нехваткой оперативной памяти, мы рекомендуем переходить на тарифный план повыше.
Проверка наличия свопа в системе:
swapon -s
Filename Type Size Used Priority
/swapfile file 40956 40956 -1
Дополнительно проверим командой:
free -m
total used free shared buff/cache available
Mem: 488 160 7 40 320 259
Swap: 39 39 0
Мы видим что SWAP готов и будет использоваться при необходимости.
В случае отсутствия можно создать файл для swap
dd if=/dev/zero of=/swap.file bs=1M count=512
Данная команда создаст файл /swap.file размером 512 мегабайт. Для увеличения данного показателя, измените count
Выставляем права на него, чтобы никто не мог писать и читать файл, кроме владельца - root
chmod 600 /swap.file
Отформатируйте файл под swap
mkswap /swap.file
Отредактируйте файл /etc/fstab
Чтобы swap включался при загрузке, нужно добавить его в /etc/fstab
Добавляем строку
/swap.file swap swap defaults 0 0
Далее можно перезагрузить сервер и проверить наличие swap командой free -m