首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ECONNRESET不是优雅地抛出错误,而是崩溃web应用程序。

ECONNRESET不是优雅地抛出错误,而是崩溃web应用程序。
EN

Stack Overflow用户
提问于 2022-01-20 13:22:50
回答 1查看 1.2K关注 0票数 0

我们有一个NodeJS应用程序作为一个运行在一个基于Linux的应用服务计划上。(配置为正常运行)。

设置:

  • NodeJS 16
  • 应用服务计划(Linux)
  • Redis (Azure托管托管服务)
  • 应用程序洞察(Azure托管托管服务)

套餐:

  • 4.17.2号特快
  • dotenv 14.2.0
  • redis 4.0.2
  • 应用洞见2.2.0

web服务进行基本数据计算,将结果作为REST服务返回。Redis用于存储先前计算的结果。

在门户中的Application级别上启用了应用程序洞察。对于额外的故障监视,我们在代码中添加了NPM包应用洞见版本2.2.0。

应用程序洞察力在应用程序启动时配置如下:

代码语言:javascript
运行
复制
const appInsights = require("applicationinsights");
appInsights.setup(process.env.APPLICATIONINSIGHTS_CONNECTION_STRING)
appInsights.start()

应用程序服务运行了一段时间,但随后意外崩溃,在KUDU日志中有以下内容:

代码语言:javascript
运行
复制
2022-01-20T00:41:19.028838008Z events.js:377
2022-01-20T00:41:19.029056811Z       throw er; // Unhandled 'error' event
2022-01-20T00:41:19.029073211Z       ^
2022-01-20T00:41:19.029079111Z 
2022-01-20T00:41:19.029084211Z SocketClosedUnexpectedlyError: Socket closed unexpectedly
2022-01-20T00:41:19.029089512Z     at TLSSocket.<anonymous> (/home/site/wwwroot/node_modules/@node-redis/client/dist/lib/client/socket.js:184:118)
2022-01-20T00:41:19.029095412Z     at Object.onceWrapper (events.js:520:26)
2022-01-20T00:41:19.029100512Z     at TLSSocket.emit (events.js:412:35)
2022-01-20T00:41:19.029105412Z     at net.js:675:12
2022-01-20T00:41:19.029110212Z     at TCP.done (_tls_wrap.js:563:7)
2022-01-20T00:41:19.029115112Z Emitted 'error' event on Commander instance at:
2022-01-20T00:41:19.029128012Z     at RedisSocket.<anonymous> (/home/site/wwwroot/node_modules/@node-redis/client/dist/lib/client/index.js:338:14)
2022-01-20T00:41:19.029149012Z     at RedisSocket.emit (events.js:400:28)
2022-01-20T00:41:19.029154512Z     at RedisSocket._RedisSocket_onSocketError (/home/site/wwwroot/node_modules/@node-redis/client/dist/lib/client/socket.js:207:10)
2022-01-20T00:41:19.029159212Z     at TLSSocket.<anonymous> (/home/site/wwwroot/node_modules/@node-redis/client/dist/lib/client/socket.js:184:107)
2022-01-20T00:41:19.029164013Z     at Object.onceWrapper (events.js:520:26)
2022-01-20T00:41:19.029168413Z     [... lines matching original stack trace ...]
2022-01-20T00:41:19.029172813Z     at TCP.done (_tls_wrap.js:563:7)

然后,我删除了使用Redis来测试没有外部连接的场景,但是在运行了一段时间之后,应用程序仍然会崩溃,而不会触发try/catch代码。

我能够跟踪以下调试信息:

代码语言:javascript
运行
复制
arg0:OperationalError {cause: Error: read ECONNRESET
    at TCP.onStreamRead…nternal/stream_base_commons:220:20)
    at TC…, isOperational: true, errno: -4077, code: 'ECONNRESET', syscall: 'read', …}
cause:Error: read ECONNRESET\n    at TCP.onStreamRead (node:internal/stream_base_commons:220:20)\n    at TCP.callbackTrampoline (node:internal/async_hooks:130:17) {errno: -4077, code: 'ECONNRESET', syscall: 'read', stack: 'Error: read ECONNRESET\n    at TCP.onStreamRea…Trampoline (node:internal/async_hooks:130:17)', message: 'read ECONNRESET'}
code:'ECONNRESET'
errno:-4077
isOperational:true
syscall:'read'
message:'read ECONNRESET'
name:'Error'
stack:'Error: read ECONNRESET\n    at TCP.onStreamRead (node:internal/stream_base_commons:220:20)\n    at TCP.callbackTrampoline (node:internal/async_hooks:130:17)'

本地调试控制台将我指向文件:/node_modules\diagnostic-channel-publishers\dist\src\console.pub.js:43:39,据我所知,该文件用于将控制台日志事件记录到Application *。

然后我删除了Application,Web应用程序在没有崩溃的情况下运行稳定。我重新启用了Redis的使用,到目前为止没有发现任何问题。这向我指出了一个问题,即应用程序洞察无法很好地处理TCP套接字连接到应用程序洞察服务的中断。

有什么方法可以证实这一点或者防止应用程序崩溃吗?

EN

Stack Overflow用户

发布于 2022-01-21 12:37:16

错误:在TCP.onStreamRead上阅读ECONNRESET\n (节点:内部/流基_公域:220:20)\n在TCP.callbackTrampoline (节点:内部/异步_钩子:130:17) {errno:-4077,代码:'ECONNRESET',syscall:' read ',堆栈:‘TCP.onStreamRea…Trampoline上的读ECONNRESET\n’(节点:内部/异步_钩子:130:17),消息:'read ECONNRESET'}

"ECONNRESET“通常是在TCP连接的另一端由于任何与协议相关的问题而关闭其结束时抛出的,而且由于没有人正在监听'error‘事件,因此会引发’error‘事件。为了解决这个问题,您需要设置一个侦听器来处理这样一个错误的情况。

应用程序洞察无法优雅地处理TCP套接字连接中的中断

可以进行的出站连接的数量是有限的。出站连接的最大数量取决于所使用的工作人员的大小。

有关更多信息,请参阅此MSFT文档

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70787026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档