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

Обновлено 28 декабря 2018 г.