NodeJS - ошибка зависания сокета

0

Я отправляю более 50 запросов на сервер, используя node.js. Однако после 20-30 запросов я получаю сообщение о зависании сокета.

Ошибка --

    Error: socket hang up
    at createHangUpError (http.js:1472:15)
    at Socket.socketOnEnd [as onend] (http.js:1568:23)
    at Socket.g (events.js:180:16)
    at Socket.EventEmitter.emit (events.js:117:20)
    at _stream_readable.js:920:16
    at process._tickCallback (node.js:415:13)
Теги:
sockets

2 ответа

0

TL; DR: Это может быть проблемой, вызванной тем, что Node запускает свой GC и замораживает все операции, что приводит к непредсказуемым случайным "зависаниям сокета".

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

  • Звонки завершаются в течение некоторого времени
  • то происходит замедление
  • затем, в конце концов, некоторые ошибки "сокета повесить"
  • то вызовы сервера продолжаются быстро

Эта картина повторяется непрерывно. Статистика DataDog на вызываемом мной сервере не показывает вариации в латентности, которые могут быть основной причиной, поэтому мой вывод - это что-то на стороне приложения Node.

Если проблема связана с GC - это плохая новость, причиной GC обычно называют "Magic" :). Вы не можете предсказать, когда и как глубоко это происходит.

НТН

0

Да, похоже, что ваш серверный сервер висит в сокете, либо из-за тайм-аута, либо по емкости. Можете ли вы подавить запросы, которые вы отправляете? Использование библиотеки, такой как async (с помощью метода Limit), может помочь вам легко сжать соединения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню