在 Ubuntu 上优化 Node.js 内存,通常可以从系统层面、Node.js 运行时参数、代码层面、进程管理、监控排查几个方向入手。下面按实战角度给你一个较完整的优化清单。
Node.js 内存主要分为:
常见内存问题:
node --max-old-space-size=1024 app.js
console.log(process.memoryUsage());
node --max-semi-space-size=64 app.js
Buffer 不占堆内存,但占系统内存:
Buffer.alloc(1024 * 1024 * 100); // 危险
✅ 使用 stream 代替一次性读取
常见泄漏点:
setInterval(() => {}, 1000); // 永不清理 = 泄漏
✅ 使用:
clearInterval(timer);
emitter.removeListener();
❌ 错误:
fs.readFile('big.mp4', () => {});
✅ 正确:
fs.createReadStream('big.mp4').pipe(res);
const pLimit = require('p-limit');
const limit = pLimit(10);
free -h
top
htop
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo nano /etc/systemd/system/node.service
MemoryMax=1G
pm2 start app.js --max-memory-restart 800M
pm2 start app.js -i max
node --inspect app.js
Chrome → chrome://inspect
setInterval(() => {
console.log(process.memoryUsage());
}, 5000);
heapdumpclinic.jspm2 monit✅ 小型 API 服务:
node --max-old-space-size=1024 app.js
✅ 大文件处理:
✅ 长期运行服务:
如果你愿意,可以告诉我:
我可以直接帮你针对性定位和优化。