温馨提示×

Ubuntu Nodejs内存如何调

小樊
33
2026-08-22 04:30:13
栏目: 编程语言

在 Ubuntu 上调优 Node.js 的内存,通常从 V8 引擎限制、系统资源、应用层优化 三个层面入手。下面按常见场景给你一套完整方案。


一、Node.js 默认内存限制

Node.js(V8)默认内存上限

架构 默认上限
64 位 ~1.5 GB(约 1536 MB)
32 位 ~0.7 GB

超出后会直接:

JavaScript heap out of memory

二、临时 / 启动级调大内存(最常用)

1️⃣ 通过环境变量(推荐)

export NODE_OPTIONS="--max-old-space-size=4096"
node app.js

或一行:

NODE_OPTIONS="--max-old-space-size=4096" node app.js

单位:MB

常见配置:

2048   # 2GB
4096   # 4GB
8192   # 8GB

2️⃣ 直接传参数(不推荐长期使用)

node --max-old-space-size=4096 app.js

三、PM2 部署时调整内存

1️⃣ 启动时指定

pm2 start app.js --node-args="--max-old-space-size=4096"

2️⃣ ecosystem.config.js

module.exports = {
  apps: [{
    name: 'app',
    script: 'app.js',
    node_args: '--max-old-space-size=4096'
  }]
}

四、Docker 中调 Node.js 内存(非常重要)

❌ 常见错误

只给容器内存,不告诉 Node.js

✅ 正确做法

ENV NODE_OPTIONS="--max-old-space-size=2048"

或运行:

docker run -e NODE_OPTIONS="--max-old-space-size=2048" app

五、系统层面限制(Ubuntu)

1️⃣ 查看当前限制

ulimit -a

重点看:

virtual memory
stack size

2️⃣ 临时修改

ulimit -v unlimited

3️⃣ 永久修改(systemd 服务)

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535

六、确认当前 Node.js 内存上限

node -e "console.log(process.memoryUsage())"

或更直观:

node -e "console.log(v8.getHeapStatistics())"

七、排查内存泄漏(非常关键)

1️⃣ 使用 --inspect

node --inspect app.js

再用 Chrome DevTools → Memory

2️⃣ 使用 clinic.js

npm install -g clinic
clinic doctor -- node app.js

3️⃣ 常见泄漏点

  • 全局变量
  • 未释放的定时器
  • 闭包
  • 缓存无限增长
  • 监听器重复绑定

八、生产推荐配置(示例)

场景 配置
2C4G 服务器 max-old-space-size=2048
4C8G 4096
Docker 容器内存 > Node 内存
PM2 使用 ecosystem

九、常见误区

Node.js 不能用大内存
✅ 能,但需要显式开启

加内存就一定快
✅ 内存不是 CPU,需避免泄漏

改一次就永久生效
✅ 环境变量 / PM2 / Docker 需持久化


十、如果你愿意,我可以帮你

你可以直接贴我:

  1. 服务器配置(CPU / 内存)
  2. 是否使用 PM2 / Docker
  3. 报错信息(如 OOM)
  4. Node.js 版本

我可以 直接给你一份最优配置方案

0