"Не хватка памяти - oom-killer". Что такое swap в Linux? Или как подкачать RAM?

catbot
13.08.2025 09:17
6 просмотров

Пример ошибки:

uvicorn invoked oom-killer: gfp_mask=0x1100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0

OOM Killer (Out-of-Memory Killer) - это механизм ядра Linux, который активируется при критическом исчерпании памяти (физической или swap) и выбирает процесс для принудительного завершения, чтобы освободить ресурсы. Этот механизм предотвращает полную остановку системы, сохраняя её стабильность в условиях высокой нагрузки.

Когда RAM заканчивается - система перемещает редко используемые куски памяти на диск (в swap), это позволяет запускать больше программ, чем позволяет физическая память. Но так как диск медленнее RAM, система может замедлиться. Зато не падает с ошибкой "не хватает памяти".

✅ Swap в Linux - это аналог "файла подкачки" (pagefile.sys) в Windows.

Даже на HDD swap - это страховка от падений при нехватке памяти. На NVMe он работает ещё эффективнее. Настраиваем:

  • 1 . Создаем обычный файл размером 2 гигабайта по пути swapfile. Этот файл будет использоваться как виртуальная память на диске.
sudo fallocate -l 2G /swapfile
  • 2 . Устанавливаем права доступа к файлу: только root может читать и писать. Это важно для безопасности - swap может содержать конфиденциальные данные (пароли, сессии, куки).
sudo chmod 600 /swapfile
  • 3 . "Форматируем" файл как swap-пространство. Добавляем внутрь специальную метку, чтобы система поняла: "этот файл - не просто файл, а место для подкачки".
sudo mkswap /swapfile
  • 4 . Активируем swap-файл. Система начинает использовать его как расширение оперативной памяти.
sudo swapon /swapfile
  • 5 . Добавляем строку в файл fstab - таблицу файловых систем. Это нужно, чтобы swap включался автоматически при каждой перезагрузке сервера.
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab