在 Ubuntu 上调优 Node.js 的内存,通常从 V8 引擎限制、系统资源、应用层优化 三个层面入手。下面按常见场景给你一套完整方案。
Node.js(V8)默认内存上限:
| 架构 | 默认上限 |
|---|---|
| 64 位 | ~1.5 GB(约 1536 MB) |
| 32 位 | ~0.7 GB |
超出后会直接:
JavaScript heap out of memory
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
node --max-old-space-size=4096 app.js
pm2 start app.js --node-args="--max-old-space-size=4096"
ecosystem.config.jsmodule.exports = {
apps: [{
name: 'app',
script: 'app.js',
node_args: '--max-old-space-size=4096'
}]
}
只给容器内存,不告诉 Node.js
ENV NODE_OPTIONS="--max-old-space-size=2048"
或运行:
docker run -e NODE_OPTIONS="--max-old-space-size=2048" app
ulimit -a
重点看:
virtual memory
stack size
ulimit -v unlimited
[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
node -e "console.log(process.memoryUsage())"
或更直观:
node -e "console.log(v8.getHeapStatistics())"
--inspectnode --inspect app.js
再用 Chrome DevTools → Memory
npm install -g clinic
clinic doctor -- node app.js
| 场景 | 配置 |
|---|---|
| 2C4G 服务器 | max-old-space-size=2048 |
| 4C8G | 4096 |
| Docker | 容器内存 > Node 内存 |
| PM2 | 使用 ecosystem |
❌ Node.js 不能用大内存
✅ 能,但需要显式开启
❌ 加内存就一定快
✅ 内存不是 CPU,需避免泄漏
❌ 改一次就永久生效
✅ 环境变量 / PM2 / Docker 需持久化
你可以直接贴我:
我可以 直接给你一份最优配置方案 ✅