Что такое…

Что такое swap (файл подкачки) — и почему сборка умирает со словом Killed

Иллюстрация: маленький стол завален бумагами, лишние листы съезжают по жёлобу в большой тихий подвал с полками

Ты арендовал самый дешёвый сервер: 1 ГБ памяти, пара сотен рублей в месяц. Залил проект, запустил npm run build. Минуту всё шуршит. А потом в терминале одно слово:

Killed

Ни стектрейса, ни строчки с ошибкой. Код выхода — 137. Это не баг в твоём коде. Систему просто прижало по памяти, и она застрелила самый жирный процесс. Спасает её обычно одна вещь — swap.

Что такое swap

Swap (по-русски «подкачка») — кусок диска, который система использует как запасную оперативную память.

Представь рабочий стол. Стол — это оперативка: всё под рукой, работать быстро. Но он маленький. Когда бумаг становится больше, чем влезает, ты не выбрасываешь их, а уносишь в подвал. Подвал — это swap. Места там много, но за каждым листом надо спускаться.

На Windows то же самое называется файл подкачки (pagefile.sys). На Mac — просто swap, он включён всегда.

Как это работает

Каждая программа просит у системы память кусками — страницами, обычно по 4 КБ. Пока оперативки хватает, всё живёт в ней.

Когда она кончается, система ищет страницы, которых давно никто не трогал. Например, вкладку браузера, открытую вчера. Их она переносит на диск, в swap. Освободившееся место отдаёт тому, кому нужнее прямо сейчас.

Если программа снова обратится к вынесенной странице, система принесёт её обратно. Это медленно: SSD в сотни раз медленнее оперативки. Но программа не умрёт, а просто подождёт.

А если swap нет вовсе? Тогда в Linux просыпается OOM killer — «убийца при нехватке памяти». Он выбирает процесс, который съел больше всех, и посылает ему SIGKILL. Отсюда и Killed, и код 137: это 128 + 9, номер сигнала. Подробнее о таких числах — в статье про код выхода.

Почему это касается тебя

Вот где ты встретишь swap, даже если не собирался про него знать.

  • Дешёвый VPS. Многие образы серверов приходят вообще без swap. 1 ГБ памяти хватает, чтобы сайт работал. Но не хватает, чтобы его собрать: next build или npm install на пике легко берут больше гигабайта.
  • Docker. Сборка образа падает с exit code 137 — тот же OOM killer. Что такое контейнер, разобрано в статье про Docker.
  • Мак на 8 ГБ. В Мониторе активности на вкладке «Память» видно строку «Использовано подкачки». Если там 10 ГБ и всё тормозит — тебе не хватает памяти, а не процессора.

Как добавить swap на сервер

Вот рабочий рецепт для Ubuntu и Debian. Сначала проверь, есть ли swap вообще:

free -h
swapon --show

Если в строке Swap нули, а swapon ничего не вывел — подкачки нет. Создаём файл на 2 ГБ:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Что тут происходит:

  1. fallocate выделяет на диске файл нужного размера.
  2. chmod 600 закрывает его от других пользователей: там могут оказаться пароли из памяти.
  3. mkswap размечает файл под подкачку.
  4. swapon включает его прямо сейчас.

Чтобы swap пережил перезагрузку, допиши строку в /etc/fstab:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Проверь free -h ещё раз — в строке Swap появятся твои 2 ГБ. Перезапусти сборку: на пике она пойдёт медленнее, зато OOM killer её уже не тронет. Перед этим убедись, что на диске есть место: если его нет, поможет статья про ошибку No space left on device.

Когда swap не спасёт

Swap — подушка, а не лекарство. Если программе постоянно нужно вдвое больше памяти, чем есть, система будет без конца гонять страницы туда-обратно. Это называется трэшинг: диск занят на 100 %, сервер не отвечает даже на ssh. Тут поможет только больше оперативки.

И ещё одна ловушка. Ошибка Node.js JavaScript heap out of memory — это не нехватка памяти в системе. Это лимит самого Node. Swap тут не поможет. Лимит поднимают переменной NODE_OPTIONS=--max-old-space-size=2048.

Сколько swap ставить?

Для маленького сервера хватит 1–2 ГБ. Задача — пережить пики вроде сборки, а не держать там всё время половину программы.

Swap портит SSD?

На современных SSD — нет, если swap работает как подушка для редких пиков. Изнашивать диск начинает постоянный трэшинг, а он и так сигнал, что памяти мало.

Почему сервер без swap по умолчанию?

Многие облачные провайдеры выключают его в образах, чтобы диск не тормозил соседей. Решение остаётся за тобой — поэтому проверь free -h на каждом новом сервере.

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →