Сервис Node.js задыхается и умирает один раз в день - PullRequest
2 голосов
/ 29 сентября 2011

Каждый день на этой неделе мой рабочий день начинался с перезапуска службы нашего узла.И каждый раз он просто выходил со следующим сообщением:

node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: ETIMEDOUT, Connection timed out
at Socket._readImpl (net.js:163:14)
at Socket._onReadable (net.js:633:22)
at IOWatcher.onReadable [as callback] (net.js:177:10)

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

В любом случае, я немного покопался и подумал, что это может быть просто ошибкой.Я добавил несколько прослушивателей on ('error') для каждого экземпляра сервера с небольшим количеством настраиваемых сообщений в журнале, чтобы убедиться, что оно перехвачено, но безрезультатно, я все еще сегодня работал с обычным сообщением об ошибке .. (Идействительно ли существует такая вещь, как события 'error', которые должны быть перехвачены?)

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

Основная цель службы - сохранитьоткрытое tcp-соединение с несколькими подключающимися клиентами и возможность выдавать команды (это очень похоже на частный ботнет для встроенного продукта).Таким образом, в 95% случаев мы просто бездействуем нашими tcp-сокетами и отправляем пакеты keep-alive.Поэтому требуется, чтобы клиенты в любой момент могли потерять соединение, не прерывая работу службы для других подключенных клиентов.

Мы используем последний стабильный узел филиала v0.4.13-pre и работаем на сервере Ubuntu.

Ответы [ 2 ]

0 голосов
/ 10 октября 2011

Добавьте что-то вроде этого в ваш код:

process.on('uncaughtException', function (err) {
  console.log('Caught Uncaught exception: ' + err);
});
0 голосов
/ 30 сентября 2011

У вас есть функция обратного вызова, связанная с событием "Ошибка" для этого объекта?

http://nodejs.org/docs/v0.4.12/api/net.html#event_error_

Для всех ваших объектов убедитесь, что у вас есть правильный обратный вызов для их соответствующих событий "ошибки", чтобы они могли корректно завершить работу, вместо того, чтобы аварийно завершить работу вашей программы.

...