Nodejs中用Axios发送请求出现ECONNRESET一般是什么情况引起的?

发布于 1周前 作者 songsunli 来自 nodejs/Nestjs

出现这个情况是在服务器请求量大的时候出现的,接口设置了超时时间为 10 秒。



问了一下 AI ,回答也是看的云里雾里。。。



有没有大佬能给小弟通俗的解释一下
Nodejs中用Axios发送请求出现ECONNRESET一般是什么情况引起的?


8 回复

就是后台的问题吧,后台接口压测一下,看看成功率


超时时就有可能通过 reset 断开链接的.
可以输入报错请求的整体请求时间, 看看是不是就是 10 秒左右.
通常是要优化服务了.

如果仅出现在并发高的场景中,很可能是 cpu 负载过高,请求已经无法处理了,我之前也有遇到过类似的,解决方案是监控 cpu 负载和使用率,用 rx 维护一个请求队列,cpu 负载过高时队列进行等待,直到负载降下来再继续

要验证是否是这个问题也很简单,查一下服务器监控数据即可

#3 是请求方服务器处理不过来还是被请求方呀?

#4 我的场景是 next.js 应用中,用户请求 page ,page 中再通过 getserverprops 请求 api 接口

请求方与被请求方 cpu 负载过高都有可能引起这个问题,说人话就是电话繁忙占线了

在Node.js中使用Axios发送请求时遇到ECONNRESET错误,通常表示远程服务器意外关闭了连接。这种情况可能由以下几个原因引起:

  1. 服务器主动断开连接

    • 服务器可能由于维护、负载过高或配置错误而主动关闭连接。
    • 服务器可能设置了超时,导致请求处理时间过长时被关闭。
  2. 网络问题

    • 网络不稳定或中断可能导致连接被意外重置。
    • 代理服务器或负载均衡器可能由于配置错误或资源限制而断开连接。
  3. 客户端问题

    • 客户端发送的请求可能由于格式错误、缺少必要的头部信息或请求体过大而被服务器拒绝。

为了调试和解决此问题,可以尝试以下方法:

  • 增加重试逻辑

    const axios = require('axios');
    const axiosRetry = require('axios-retry');
    
    axiosRetry(axios, { retries: 3 });
    
    axios.get('http://example.com')
      .then(response => console.log(response))
      .catch(error => console.error('Error:', error));
    
  • 检查服务器日志: 查看服务器端的日志,以确定是否有关于关闭连接的错误信息或警告。

  • 调整超时设置: 增加请求的超时时间,确保请求不会因为处理时间过长而被服务器关闭。

  • 网络诊断: 使用网络诊断工具(如ping、traceroute)检查网络连接是否稳定。

通过这些方法,可以更有效地定位和解决ECONNRESET错误。

回到顶部