Я отправляю более 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)
TL; DR: Это может быть проблемой, вызванной тем, что Node запускает свой GC и замораживает все операции, что приводит к непредсказуемым случайным "зависаниям сокета".
Я пережил аналогичную ситуацию. Я запускаю кучу серверных вызовов, завернутых в обещания, которые запускаются параллельно, а затем имеют цикл со сном, который периодически проверяет их завершение. Я наблюдаю следующую схему:
Эта картина повторяется непрерывно. Статистика DataDog на вызываемом мной сервере не показывает вариации в латентности, которые могут быть основной причиной, поэтому мой вывод - это что-то на стороне приложения Node.
Если проблема связана с GC - это плохая новость, причиной GC обычно называют "Magic" :). Вы не можете предсказать, когда и как глубоко это происходит.
НТН
Да, похоже, что ваш серверный сервер висит в сокете, либо из-за тайм-аута, либо по емкости. Можете ли вы подавить запросы, которые вы отправляете? Использование библиотеки, такой как async (с помощью метода Limit), может помочь вам легко сжать соединения.