Почему 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 | bash
    nvm install 18
    Затем переустановите PM2: npm install -g pm2.

    4. Используйте systemd или screen как альтернативу

    Если PM2 продолжает сбрасываться, попробуйте запустить приложение через screen или tmux, либо создайте systemd-сервис. Пример для screen:
    screen -S myapp
    node server.js
    Отключитесь от сессии: Ctrl+A, D.

    Что делать, если ничего не помогает

    Если все шаги не дали результата, проверьте системные логи VPS: dmesg | tail -20 или journalctl -xe. Возможно, процесс убивается ядром из-за нехватки памяти (OOM Killer). В этом случае единственный выход - увеличить объём RAM или перейти на более новую версию Ubuntu.

    Часто задаваемые вопросы