2017-02-18 12 views
2

Я пытаюсь понять, почему мое приложение nodejs становится не отвечает после 11 часов 20 минут. Это происходит каждый раз, независимо от того, запускаю ли я его на amazon-linux или Red Hat.Узел приложения не отвечает за определенное количество времени

Мои Стек:

  • nodejs (v 6.9.4.)
  • MongoDB (3.2)
  • PM2 менеджер процессов
  • AWS EC2 экземпляр Т2 среднего

Каждый раз, Я запускаю приложение, он становится невосприимчив с ошибкой, возвращенной в браузер:

сетка :: ERR_CONNECTION_RESET

Pm2 не перезапустить приложение, так что я подозреваю, что это не имеет ничего общего с nodejs, я также проанализировал приложение и он не имеет утечек памяти. Журналы Db также выглядят хорошо.

Единственным постоянным фактором является то, что приложение вылетает после его запуска в течение 11 часов 20 минут.

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

Я также проверил var/log/messages и /home/centos/messages, но ничего не связано с крушением приложения.

/var/log/mongodb/mongo.log также не показывает ничего конкретного.

Что было бы лучшим способом подойти к проблеме?

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

Благодаря

+1

Вы пропускаете что-то другое, кроме памяти, это моя догадка, возможно, файловые дескрипторы. Попробуйте использовать netstat или lsof, чтобы узнать, есть ли гораздо больше открытых подключений или файлов, чем вы ожидаете. –

+0

это работает, если вы используете узел напрямую, а без pm2? – Robbie

+0

@WillisBlackburn Это похоже! Соединение UDP не освобождается, а nodejs достигает жесткого предела. Не знаете, как работает переполнение стека, но могу ли я принять ваш комментарий в качестве ответа? Пока не подтверждено, мне нужно провести еще один день на тестировании, но похоже на это! Большое большое спасибо! Я потратил на это сотни часов! – matewilk

ответ

1

Скопированы из комментария, поскольку он, по-видимому привел к решению:

Вы протечка нечто иное, чем память является моим предположением, может быть файл дескрипторы. Попробуйте использовать netstat или lsof, чтобы узнать, есть ли гораздо больше открытых подключений или файлов, чем вы ожидаете.

+0

Спасибо, Уиллис! Чтобы уточнить, 'lsof' был ответом на все мои проблемы. Это показало мне невыпущенные сеансы UDP (одной из сторонних библиотек проекта), что привело к ограничению файловых дескрипторов на сервере dev env (где предел был установлен на 4096 - стандарт для Linux-машин).Моя машина разработки (mac) не имеет ограничений, и у производственного сервера нет предела, или он установлен на что-то намного большее, чем 4096. – matewilk