Большое количество запросов - Ошибка: getaddrinfo ENOTFOUND
При выполнении большого количества запросов в узле (используя версию 6.3.0, но это также происходило в других версиях), я получаю сообщение об ошибке getaddrinfo ENOTFOUND.
Исследуя эту проблему, я обнаружил следующую проблему с github для более старых версий узла: https://github.com/nodejs/node-v0.x-archive/issues/5488 Однако я не смог найти решение в этом потоке.
Этот поток предоставил следующий пример кода: https://gist.github.com/eelcocramer/5626801
Суть состоит из трех файлов: error-case.js
, fixed-error-case.js
, а также success-case.js
Однако ни один из файлов не работает для меня без ошибок.
Бег error-case.js
производит следующее:
...
Request count = 1569
STATUS: 200
Request count = 1570
problem with request: getaddrinfo ENOTFOUND www.google.com www.google.com:80
Last successful request count = 1570
problem with request: getaddrinfo ENOTFOUND www.google.com www.google.com:80
Last successful request count = 1570
...
Тем не менее, когда я бегу fixed-error-case.js
Я получаю следующее:
...
Request count = 1562
STATUS: 200
Request count = 1563
problem with request: getaddrinfo ENOTFOUND www.google.com www.google.com:80
Last successful request count = 1563
problem with request: getaddrinfo ENOTFOUND www.google.com www.google.com:80
Last successful request count = 1563
...
И аналогично с success-case.js
Request count = 1563
STATUS: 200
Request count = 1564
problem with request: getaddrinfo ENOTFOUND www.google.com www.google.com:80
Last successful request count = 1564
problem with request: getaddrinfo ENOTFOUND www.google.com www.google.com:80
Last successful request count = 1564
^C
Но затем, что еще более примечательно, если я запустлю его снова (после>1 минуты ожидания), я получу следующее:
problem with request: getaddrinfo ENOTFOUND www.google.com www.google.com:80
Last successful request count = 0
problem with request: getaddrinfo ENOTFOUND www.google.com www.google.com:80
Last successful request count = 0
problem with request: getaddrinfo ENOTFOUND www.google.com www.google.com:80
Last successful request count = 0
Таким образом, ошибка, кажется, сохраняется через несколько прогонов, что интересно.
Кроме того, поскольку этот пример кода не совсем тот код, который я на самом деле выполняю, я должен также отметить, что я пытался использовать request-promise
в сочетании с bluebird's map
функция с concurrency
так что одновременно действует так много обещаний, но это также не решило проблему. (Попытка выполнить ~300 запросов с параллелизмом, установленным на 5, все еще приводила к сбою)
Любая помощь / мысли будут оценены.
Спасибо