奇怪的ECONNRESET错误我无法弄清楚

我不知道,如果这是关于koa,或者是一些其他npm模块或别的东西的问题。 我要从这里开始。 如果这是错误的地方,我会把它移到适当的地方。 我只需要把它写在某个地方,因为它让我发疯。

所以这个问题。 我正在用koa v1编写REST api。 我们在Docker镜像中运行节点服务器。 我们有一个端点,开始导入并返回状态200,并带有消息“import started”,当导入完成时,我们发送Slack消息来通知我们。

所以首先我testing了本地机器上的服务器,一切正常(端点不会引发任何错误)。 然后我build立了docker形象。 我运行容器localy,一切正常(端点不会引发任何错误)。 我把我的图像部署到Mesos环境,一切工作到目前为止。 容器运行,每个端点工作,除了导入端点。 当我调用它,几秒钟后(5到10),我得到ECONNRESET错误,正在运行的容器被杀死,新的运行实例被启动。 所以导入被终止。

一开始,我们为docker容器分配了128MB内存,这似乎足够了。 导入错误发生后,我们以为OOM可能会杀死进程。 所以我们决定检查dmesg,找不到与OOM相关的日志条目和正在运行的容器的进程。 然后我们检查了localy容器的ram使用情况(用htop),发现它使用了aprox。 250+ MB,所以我们决定在马拉松configuration中添加更多内存(512 MB)。 然而,这并没有帮助,同样的错误发生。

由于错误不够明确,我们安装了longjohn模块,所以我们可以得到更详细的错误信息。 这让我们获得了更多的信息,但是没有我们想象的那么多。

 Error: read ECONNRESET at exports._errnoException (util.js:1026:11) at TCP.onread (net.js:569:26) --------------------------------------------- at Application.app.callback (/src/node_modules/koa/lib/application.js:130:45) at Application.app.listen (/src/node_modules/koa/lib/application.js:73:39) at Promise.then.result (/src/server.js:97:13) Error: read ECONNRESET at exports._errnoException (util.js:1026:11) at TCP.onread (net.js:569:26) 

server.js的第97行是:

  96:if(!module.parent) { 97: app.listen(port, (err) => { 98: if (err) { 99: console.error('Server error', err); 100: } 101: console.log('Listening on the port', port); 102: }); 103:} 

导入端点的粗略逻辑:那么在端点逻辑中究竟发生了什么。 我们正在使用postgres npm模块pg 。 我们将pg.Pool传递给上下文,所以稍后我们可以在我们的模型中使用它。 我们正在执行封装在promise中的insert查询,并在数组中推送promise。 大约有2700多条logging。 后来我们在承诺数组上做了Promise.allthen我们把消息发送给Slack。

正如你所看到的,我不知道这个错误是与koapg还是其他的东西有关。 更有趣的是,本地一切工作(节点服务器,以及在docker集装箱),但它并没有。 我会感谢任何有关如何找出问题的见解或提示。

  • koa npm模块的版本:1.2.0
  • pg npm模块的版本:6.1.0
  • Postgres 9.5版本
  • 版本的Mesos:1.0.1

编辑:

感谢另一位开发人员,我们发现了错误的原因。 运行导入时,我们使用池中的所有连接。 当马拉松在导入时请求服务状态时,服务试图连接到数据库以testing连接,并且此时与数据库的连接被终止。 服务变得不健康,马拉松重新启动服务。 我们重新考虑了import代码。 我们正在限制连接池的数量。

最好的祝福。

       

网上收集的解决方案 "奇怪的ECONNRESET错误我无法弄清楚"

根据这个github问题,这是一个微小的lr引起的错误。

看来降级到版本0.2.1停止它,但是这通常是你正在使用的其他软件包的依赖,你无法控制。 您可以通过显示除此以外的所有错误来筛选错误,如下所示:

 if (error.code !== 'ECONNRESET') { console.log(error) } 

问题仍然存在,并且从2016年10月27日开始。不知道是否会得到解决。 但是,就反馈意见而言,这似乎不是一个危险的错误,或者是任何影响。 但是,如果有办法,我宁愿修好。