【问题标题】:Performance of Axios http calls is bad, calls are taking longer time resulting in lower transactions per secondAxios http 调用的性能很差,调用需要更长的时间,导致每秒事务数减少
【发布时间】:2020-07-12 01:46:39
【问题描述】:

我们有使用 node js 构建的微服务。一项服务(例如服务 A)需要对其他服务(例如服务 B)进行 http api 调用才能完成其功能。服务 A 的负载测试给出了较低的 TPS(每秒事务数),其原因是 api 调用需要时间。但是,当直接在服务 B 上进行负载测试时,可以提供非常好的 TPS。

在负载测试期间,TPS 开始逐渐下降。

所以我认为 node js 或 axios 库导致了性能问题。

请告诉我如何在 api 调用中获得更好的性能。

我有如下简单的快速路由方法,我正在使用soap ui进行简单的负载测试,与直接对下面使用的ping url进行负载测试的TPS相比,我得到的TPS不到50%

router.post("/", async function(req, res) {
  await axios.get("http://localhost:3501/ping");
   res.status(201).json("completed");

});

【问题讨论】:

  • 您的 Node.js 服务器是否仅用作另一个端口的代理?如果是这样,你最好使用 nginx,它比 express 和 axios 性能要好得多。此外,那里的代码不会向res 发送响应。您是否检查过在运行该 Node.js 服务器时是否确实收到了响应?
  • 很遗憾这个问题仍然没有答案。我刚刚发现了同样的错误。如果服务 A 使用 axios 对服务 B 进行大量调用(A 是处理器,B 正在保存这些结果),那么 CPU 使用率会上升,内存使用率也会上升。 GC无法恢复内存,会失败。

标签: node.js performance axios


【解决方案1】:

Node.js 中存在一个问题,即处理每个传入的 64Kb 数据都需要事件循环进行一次完整的旋转。如果您正在执行大量并行请求或执行任何其他增加事件循环延迟的工作,则性能将受到很大影响。 axios 受此影响很大。

我有一个停滞不前的 PR 来解决这个问题: https://github.com/nodejs/node/pull/39097

一种解决方法是增加highWaterMark - 请参阅链接问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多