RE:NODE
Обзор хостинга

Ресурсы5 мин чтения

Почему ваше Node-приложение умирает на 2 ГБ при тарифе в 4 ГБ

Лимит контейнера и лимит кучи V8 — два разных потолка. Процесс упирается в нижний первым.


Процесс Node на тарифе в 4 ГБ, который падает, пока график в панели показывает 2 ГБ свободных, — это не баг хостинга. У Node свой потолок кучи, заданный независимо от объёма памяти контейнера, и по умолчанию он заметно ниже тарифа.

Два потолка

Лимит контейнера — это то, что мы даём серверу. Лимит кучи V8 — это то, сколько Node позволяет занять собственным объектам JavaScript, прежде чем сдастся и бросит ошибку. Старые версии Node ставят кучу около 1,5-2 ГБ независимо от машины; новые читают контейнер, но не всегда правильно.

Как поднять

node --max-old-space-size=3072 server.js

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

Но сначала проверьте, нужно ли это

Приложение, которое растёт, пока не упрётся в любой потолок, течёт, и поднятие потолка покупает часы, а не чинит. Если память ровно растёт при постоянной нагрузке, менять надо число в коде, а не в команде запуска.