CentOS上Node.js内存管理指南
Node.js运行在V8引擎之上,其内存管理遵循V8的分代式垃圾回收机制(新生代、老年代),默认堆内存限制为1.4GB(64位系统)。内存主要分为堆内存(存储对象、函数等)和栈内存(存储原始值、函数调用),其中堆内存是优化的重点。
使用CentOS自带工具实时查看内存使用情况:
M键按内存排序);rss:常驻内存集;heapTotal:堆总内存;heapUsed:已用堆内存);使用heapdump模块生成堆快照,通过Chrome DevTools的Memory面板分析内存泄漏点:
npm install heapdump --save
代码中添加:
const heapdump = require('heapdump');
// 在可疑位置生成堆快照(如内存异常增长时)
heapdump.writeSnapshot('/tmp/snapshot_' + Date.now() + '.heapsnapshot');
生成的.heapsnapshot文件可通过Chrome浏览器打开,查看对象引用链。
通过--max-old-space-size参数扩大堆内存上限(单位:MB):
node --max-old-space-size=2048 app.js # 设置为2GB
export NODE_OPTIONS="--max-old-space-size=2048"
node app.js
ecosystem.config.js中设置:module.exports = {
apps: [{
name: 'app',
script: 'app.js',
max_memory_restart: '2G' // 内存超过2GB时自动重启
}]
};
let/const代替var;emitter.removeListener);clearInterval/clearTimeout清除不再需要的定时器;node-cache或Redis设置缓存过期时间,避免缓存无限增长;null。fs.createReadStream/fs.createWriteStream逐块处理大文件,避免一次性加载到内存;async/await或Promise避免阻塞事件循环,必要时用setImmediate/process.nextTick拆分任务;worker_threads模块处理CPU密集型任务(如加密、图像处理),避免阻塞主线程。mysql2的pool)减少连接开销。使用PM2作为进程管理器,实现内存泄漏时的自动重启:
npm install pm2 -g
pm2 start app.js --max-memory-restart 2G # 内存超过2GB时重启
pm2 monit # 监控进程内存、CPU使用情况
PM2还支持日志管理、集群模式等功能,提升应用稳定性。