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

使用NestJS+Node.js v20.12.1遇JavaScript堆内存不足错误求助

NestJS + Node.js v20.12.1 内存不足问题排查方案

一、先解决直接内存限制问题

从错误提示里的ForkTsCheckerWebpackPlugin相关信息入手,优先调整TypeScript检查器的内存配置:

  • 在webpack配置文件(如webpack.config.js)或nest-cli.json的webpack配置段中,修改ForkTsCheckerWebpackPlugin的memoryLimit值,从默认512MB提升至1024MB或2048MB:
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');

module.exports = {
  plugins: [
    new ForkTsCheckerWebpackPlugin({
      memoryLimit: 2048 // 单位:MB
    })
  ]
};
  • 若使用NestCLI默认配置,直接修改package.json的启动脚本,给Node进程增加内存上限:
{
  "scripts": {
    "start": "node --max-old-space-size=4096 dist/main.js",
    "start:dev": "nest start --watch --exec 'node --max-old-space-size=4096'"
  }
}

--max-old-space-size值可根据机器内存调整(如4096对应4GB、8192对应8GB)。

二、排查内存泄漏根源

若调整内存后仍报错,大概率是代码存在内存泄漏:

  • 用Node.js内置的--inspect参数启动项目,配合Chrome DevTools分析:
    1. 启动命令改为:node --inspect --max-old-space-size=4096 dist/main.js
    2. 打开Chrome浏览器输入chrome://inspect,添加本地默认端口9229后连接Node进程
    3. 进入「Memory」面板,定期生成Heap快照,对比快照中持续增长未释放的对象(如全局变量、未清理的RxJS订阅、未关闭的数据库连接等)
  • 检查NestJS常见泄漏点:
    • 控制器/服务中使用RxJS的interval、fromEvent等流但未在销毁时调用unsubscribe
    • 内存缓存或Redis缓存未设置过期时间,导致数据无限累积
    • 数据库连接池配置不合理,连接数过多且未自动回收
    • 中间件/拦截器中创建的大对象未及时释放

三、排查TypeScript相关问题

错误提示提到可能是TypeScript Bug,可尝试:

  • 升级TypeScript到最新稳定版:npm install typescript@latest
  • 临时关闭tsconfig.json中的strict模式,测试是否因严格类型检查导致内存占用过高
  • 排查项目中是否存在循环引用的类型定义,这类问题可能引发类型检查时内存暴涨

四、其他排查方向

  • 检查第三方依赖,逐个升级或移除可疑包,测试是否是依赖包存在内存泄漏
  • 若仅开发环境出现问题,关闭热重载启动项目,排查是否是热重载导致的内存累积

附翻译后的错误信息:
FATAL ERROR: 已达堆内存限制 分配失败 - JavaScript堆内存不足
----- 原生栈追踪 -----
1: 00007FF60DA7C81B node::SetCppgcReference+17979
2: 00007FF60D9E6674 DSA_meth_get_flags+89316
3: 00007FF60E464871 v8::Isolate::ReportExternalAllocationLimitReached+65
4: 00007FF60E44DFC8 v8::Function::Experimental_IsNopFunction+1336
5: 00007FF60E2AFA70 v8::Platform::SystemClockTimeMillis+659328
6: 00007FF60E2ACAF8 v8::Platform::SystemClockTimeMillis+647176
7: 00007FF60E2C1E0A v8::Platform::SystemClockTimeMillis+733978
8: 00007FF60E2C2687 v8::Platform::SystemClockTimeMillis+736151
9: 00007FF60E2D0F7F v8::Platform::SystemClockTimeMillis+795791
10: 00007FF60DF91CA5 v8::CodeEvent::GetFunctionName+116773
11: 00007FF60E51619E v8::PropertyDescriptor::writable+677998
12: 00007FF60E4E2115 v8::PropertyDescriptor::writable+464869
13: 00007FF60E484E13 v8::PropertyDescriptor::writable+83171
14: 00007FF5E83DE857
RpcExitError: 进程 11824 退出,代码为 134
代码检查服务中止 - 可能是内存不足。检查 ForkTsCheckerWebpackPlugin 配置中的 memoryLimit 选项。如果增加内存无法解决问题,很可能是 TypeScript 的 bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 03:22:24