Что такое 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
Что тут происходит:
fallocateвыделяет на диске файл нужного размера.chmod 600закрывает его от других пользователей: там могут оказаться пароли из памяти.mkswapразмечает файл под подкачку.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 на каждом новом сервере.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





