Почему PM2 сбрасывает процесс Node.js и как это исправить
Если вы арендовали VPS, подключаетесь через PuTTY и запускаете Node.js приложение командой node start server.js - всё работает, но при использовании менеджера процессов PM2 демон постоянно сбрасывается, вы не одиноки. Эта проблема часто встречается на старых версиях Ubuntu, где доступ к системе ограничен. Разберём основные причины и способы решения.
Основные причины сброса PM2
Сброс процесса PM2 может быть вызван несколькими факторами:
- Нехватка оперативной памяти - если на VPS мало RAM, PM2 может завершать процесс для освобождения ресурсов.
- Ошибки в коде приложения - необработанные исключения или утечки памяти приводят к аварийному завершению.
- Некорректная конфигурация PM2 - неправильные параметры запуска (например,
--max-memory-restart). - Старая версия Ubuntu - устаревшие пакеты или ядро могут вызывать несовместимость.
Как проверить логи PM2
Для диагностики выполните команду pm2 logs - она покажет последние сообщения об ошибках. Обратите внимание на строки с exit или error. Если в логах указано JavaScript heap out of memory, проблема в нехватке памяти.
Пошаговое решение проблемы
1. Увеличьте лимит памяти для приложения
Запустите приложение с параметром --max-old-space-size:pm2 start server.js --node-args='--max-old-space-size=512'
Это ограничит использование памяти узлом, предотвращая сброс.
2. Настройте PM2 для автоматического перезапуска
Используйте опцию --max-memory-restart для перезапуска при превышении порога:pm2 start server.js --max-memory-restart 300M
Также можно задать количество попыток перезапуска: pm2 start server.js --max-restarts 10.
3. Проверьте версию Node.js и PM2
На старых Ubuntu часто стоят устаревшие версии. Обновите Node.js через nvm:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bashnvm install 18
Затем переустановите PM2: npm install -g pm2.
4. Используйте systemd или screen как альтернативу
Если PM2 продолжает сбрасываться, попробуйте запустить приложение через screen или tmux, либо создайте systemd-сервис. Пример для screen:screen -S myappnode server.js
Отключитесь от сессии: Ctrl+A, D.
Что делать, если ничего не помогает
Если все шаги не дали результата, проверьте системные логи VPS: dmesg | tail -20 или journalctl -xe. Возможно, процесс убивается ядром из-за нехватки памяти (OOM Killer). В этом случае единственный выход - увеличить объём RAM или перейти на более новую версию Ubuntu.