NodeJs + Express API逐渐消耗更多的CPU

时间:2019-03-13 18:07:32

标签: node.js express request

我们有一个Node / Express API,该API调用SAP端点并解析响应,并将解析后的有效负载放入redis。该api在docker容器中运行,并使用AWS ECS进行部署。我正在使用请求模块来调用SAP端点,使用JSON流传递响应,并在收到的每个块上运行一个映射。该API一经部署,响应速度很快,但随着时间的推移(超过10小时)逐渐变慢。 ECS指标表明CPU负载增加。我还设置了新的文物监视,该监视表明在调用SAP API上花费了大量时间,但是在检查SAP的网关日志时,我们发现API在每次调用中都在同一时间响应。我已经尝试了几乎所有的东西,但还是空白。我正在使用节点高山图像(如果有区别的话)。

我在New Relic上看到的是,该请求在等待下游调用(SAP API)解析时被保留。等待时间逐渐增加,这会导致总体延迟。

这是我的代码来调用SAP api并解析响应:

return new Promise((resolve, reject) => {
    const url = `<COMPUTE SAP-URL>`;
    logger.debug(`Sending request : ${url}`);
    const options = {
        url,
        auth: {
            user: <username>
            pass: <password>
        },
        json: true
    };
    const stream = request.get(options)
        .pipe(JSONStream.parse('*.*'))
        .pipe(es.mapSync((data) => {
            // process data here
        }));

    stream.on('error', reject).on('end', () => {
        logger.debug('Completed the processing of the response from SAP');
        return resolve(formattedResponse);
    });
});

我添加了新的Relic交易明细和ECS CPU使用情况图表以供参考。

有人能指出我发生了什么事吗?

New Relic Transaction breakdown

ECS CPU breakdown

0 个答案:

没有答案