如何解决Node.js进程中的ESOCKETTIMEDOUT / ECONNRESET错误

这是一个相当复杂的情况,所以我只是描述一下大局。 我们已经有几个星期了错误,所以任何想法,将不胜感激。

我们有四个networking跳跃:

client (Node.js) | AWS ELB | routing proxy service (Node.js) | Squid proxy | the internet 

我们正在观察以下错误:

  • 客户
    • ESOCKETTIMEDOUT
    • 套接字挂断
    • 截断的响应(部分JSON,在中间的某个点切断)
    • getaddrinfo ENOTFOUND
    • 在极端情况下,我们也会看到Postgres和Redis连接出现networking错误
  • ELB
    • 有时我们观察到浪涌队列填满并丢弃连接。 这似乎已经通过启动更多的路由器盒来解决。
  • 路由代理
    • ECONNRESET
    • 超时
    • EMFILE

我们试过了什么?

  • 增加Node.js HTTP代理的maxSockets
  • 增加最大打开的文件ulimit
  • 增加TCP somaxconn
  • 监视连接池大小(通常在正常范围内)

任何想法赞赏。