Сервер ExpressJS отключается каждую ночь - 502 Bad Gateway - PullRequest
0 голосов
/ 09 октября 2018

У меня есть веб-сайт с Nginx, установленным в качестве резервного прокси для сервера ExpressJS (прокси для порта 3001).Здесь используются Node и ReactJS для моего веб-приложения.

В настоящее время это просто тестовый веб-сайт, который не известен и не используется никакими пользователями.Я установил это на Digital Ocean Droplet с Ubuntu.

Каждое утро, когда я просыпаюсь, я загружаю свой веб-сайт и вижу 502 Bad Gateway.Проблема в том, что я не знаю, как узнать, как это произошло.У меня установлен PM2, который должен автоматически перезапустить мой сервер ExpressJS, но этого не произошло, и когда я запускаю pm2 list, мое приложение по-прежнему показывает online:

enter image description here

Когда я запускаю pm2 logs, я получаю следующую ошибку (я выполняю это как администратор):

enter image description here

Поэтому я буду запускать pm2 restart all, чтобы перезапустить приложение, но тогда я не вижу никакой информации о сбое.Однако в этом случае при съемке этого скриншота было несколько необычных запросов./robots.txt, /sitemap.xml и /.well-known/security.txt, но ничего не указывает на сбой:

enter image description here

Когда я смотрю на свой файл Nginx error.log,все, что я вижу, это следующее:

enter image description here

Однако в моем access.log ([09/Oct/2018:06:33:19 +0000]) есть что-то неясное, но у меня нетИдея, что это значит:

enter image description here

Если я запускаю curl localhost:3001, когда сервер находится в автономном режиме, я получу сообщение об ошибке подключения.Это работает нормально после того, как я запустил pm2 restart all.

Я полностью застрял с этим, и даже небольшая помощь будет принята с благодарностью, даже если это просто сказать мне, что я лаю не на том деревеполностью и нужно искать в другом месте - спасибо.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Вы не можете сказать, когда именно NodeJS выйдет из строя, или сделает большой сборщик мусора, или остановится по другой причине.

Самый простой способ решить такие проблемы - это проверить работоспособность и перезапустить приложение.Это не должно быть проблемой при работе с кластером.

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

0 голосов
/ 09 октября 2018

Я думаю, вы должны проверить эту ветку github , похоже, она может вам помочь.

По сути, через несколько часов сервер Nodejs перестает работать, а плохой nginx не можетпересылать свои запросы, так как служба, прослушивающая прямой порт, не работает.Таким образом, это вызывает ошибку 502.

Это все из-за утечки памяти, которая приводит к массовой сборке мусора, а затем к сбою сервера.Проверьте потребление памяти, у вас могут быть некоторые сюрпризы.И попробуйте отладить код вашего приложения, часть (зависимость) в то время.

Обновленный ответ:

Итак, я добавлю еще одну ветку к моему вопросу, поскольку, похоже, она вам пока не помогла.Вы можете попытаться избавиться от pm2 и использовать systemd для управления жизненным циклом своего приложения.

Создать файл службы

sudo vim /lib/systemd/system/appname.service

Это простой файл, который я использовал сам для случайного приложения ExpressJS:

[Unit]
Description=YourApp Site Server

[Service]
ExecStart=/home/user/appname/index.js
Restart=always
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/home/user/appname

[Install]
WantedBy=multi-user.target

Обратите внимание, чтоон попытается перезапуститься, если произойдет сбой Restart=always

Управление им с помощью systemd

Зарегистрируйте новый сервис с помощью:

sudo systemctl daemon-reload

СейчасЗапустите ваше приложение из systemd с помощью:

sudo systemctl start appname

С этого момента вы сможете управлять жизненным циклом приложения с помощью обычных команд systemd.

Вы можете добавить stdout и stderr в системный журнал дляпонять, что делает ваше приложение

StandardOutput=syslog
StandardError=syslog

Надеюсь, это поможет больше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...