奇怪的EconReset错误,我搞不懂

0md85ypi  于 2021-06-26  发布在  Mesos
关注(0)|答案(2)|浏览(474)

我不知道,这是否与koa有关,或者是其他npm模块的问题或其他什么。我要从这里开始。
因此,我们要解决这个问题。我正在用koav1编写restapi。我们正在docker映像中运行节点服务器。我们拥有的一个端点启动导入并返回状态200,其中包含消息:“import started”,当导入完成时,我们发送slack消息通知我们。
因此,首先我在本地机器上测试了服务器,一切正常(endpoint不会抛出任何错误)。然后我建立了docker的形象。我在本地运行容器,一切正常(端点不会抛出任何错误)。我将图像部署到mesos环境,目前为止一切正常。容器运行,每个端点都工作,除了导入端点。当我打电话的时候,几秒钟后(5到10秒),我得到了 ECONNRESET 错误,正在运行的容器被终止,新的正在运行的示例被启动。所以导入被终止。
一开始,我们为docker容器分配了128mbram,这似乎足够了。导入错误发生后,我们认为这可能会终止进程。因此,我们决定检查dmesg,但找不到任何与oom和正在运行的容器的进程相关的日志条目。然后我们在本地检查了容器的ram使用情况(使用htop),发现它使用了aprox。250+mb,所以我们决定在marathon配置中添加更多ram(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和push promises中的insert查询。大约有2700多条记录。以后我们会的 Promise.all 一系列的承诺 then 我们把信息发给斯莱克。
如你所见,我不知道这个错误是否与 koa 或者 pg 或者别的什么。更有趣的是,在本地一切都可以工作(节点服务器以及docker容器),但在mesos上却不行。我怎样才能找出问题所在?
koa npm模块版本:1.2.0
pg npm模块版本:6.1.0
postgres 9.5版本
mesos版本:1.0.1

uplii1fm

uplii1fm1#

多亏了另一个开发人员,我们才发现了错误的原因。在运行导入时,我们使用了池中的所有连接。
当marathon在导入时请求服务状态时,服务尝试连接到数据库以测试连接,此时与数据库的连接被终止。服务变得不正常并重新启动服务。我们重新计算了进口代码。我们正在限制池连接的数量。

jckbn6z7

jckbn6z72#

根据这个github问题,这是一个由微小的lr引起的错误。
似乎降级到版本 0.2.1 停止它,但这通常是对您正在使用的其他包的依赖,您无法控制这些包。您可以通过显示除此之外的所有错误来过滤错误,例如:

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

发行日期为2016年10月27日。不知道能不能修好。但就反馈而言,这似乎不是一个危险的错误,也不会产生任何影响。但是,如果有办法的话,我也宁愿修我的。

相关问题