You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS Express应用运行一段时间后崩溃,如何实现服务持续稳定运行?

你遇到的ECONNRESET错误是TCP连接被远程端异常中断导致的,NodeJS进程默认遇到未捕获的错误会直接退出,nodemon仅监听文件变更触发重启,不会处理运行时的未捕获异常,所以无法解决问题。

1. 全局捕获异常避免进程直接崩溃

在你的app.js入口文件最顶部添加全局异常监听代码:

// 捕获同步未处理异常
process.on('uncaughtException', (err) => {
  console.error('未捕获的异常:', err)
  // 非致命错误可以继续运行,致命错误建议记录日志后退出,由进程管理工具自动重启
  if (!err.fatal) return
  // 退出前可执行优雅关闭逻辑:关闭数据库连接、清理临时资源等
  process.exit(1)
})

// 捕获异步Promise未处理的拒绝
process.on('unhandledRejection', (reason, promise) => {
  console.error('未处理的Promise拒绝:', reason)
})

如果你的服务内部有主动发起第三方HTTP请求、数据库连接等操作,也要给对应的连接/请求对象添加error事件监听,避免错误冒泡到全局。

2. 用进程管理工具做兜底自动重启

用pm2替代直接用node或者nodemon启动服务,pm2会监控进程状态,遇到异常退出自动重启,还支持日志管理、负载均衡等能力:

  • 安装pm2:npm install pm2 -g
  • 启动服务:pm2 start app.js --name "你的服务名"
  • 查看服务状态:pm2 list
  • 查看运行日志:pm2 logs 你的服务名
  • 配置开机自启:执行pm2 startup按照提示操作即可,后续服务崩溃、服务器重启都会自动拉起服务

3. 根因排查建议

兜底方案只能保证服务可用,你还可以通过以下方式定位触发错误的根源:

  • 给所有对外请求添加超时时间,避免长时间空闲连接被服务器主动断开
  • 完善请求日志,记录每次对外请求的地址、参数、返回状态,定位触发ECONNRESET的具体交互对象
  • 检查数据库、Redis等长连接的配置,是否有心跳检测、断开自动重连的逻辑,避免长连接超时被服务端重置

内容的提问来源于stack exchange,提问作者Utkrisht Agrawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:45:03