nodejs http клиент застрял на большом трафике - PullRequest
1 голос
/ 28 марта 2020

Я сталкиваюсь со странным поведением, которое не могу объяснить, у меня кластер GKE из 1 экземпляра (2 процессора, 4 ГБ памяти), который содержит 1 службу nodeJS приложения с 2 репликами, которые содержат 1 функцию:

        const req = client.get("https://myextrenalapi.com", opts, (res) => {
            let responseBody = ''
            res.socket.setNoDelay();
            res.on('data', (chunk) => { responseBody += chunk })
            res.on('end', () => {
                return responseBody;
            })
        })

теперь, после начала загрузки этого сервера со скоростью около 130 об / мин, он начинает работать медленно, и запрос http-клиента занимает более 10 секунд (300 мс).

НО, когда я пытаюсь CURL из одного из моих узлов (во время стресс-теста): https://myextrenalapi.com на запросы уходит 300 мс, так почему же curl делает это за 300 мс, а для nodeJS http-клиента это занимает более 10 секунд?

Я добавил протоколирование к http-клиенту во время стресс-теста:

{"dnsLookup":194,"tcpConnection":6875,"tlsHandshake":9206,"firstByte":10746,"end":10746}

есть идеи, почему это так медленно останавливает CURL при высокой нагрузке? я попробовал почти все в nodeJS стороне, я изменил maxTcpConnection, keep-alive, полностью удалил агента, но результаты почти одинаковы для всех senar ios

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...