Node.js在CentOS上的内存优化技巧
一 基础配置与环境
node --max-old-space-size=4096 app.js(将老生代上限设为4GB)export NODE_OPTIONS="--max-old-space-size=4096"free -h、df -h 检查物理内存与磁盘空间,必要时增加交换分区(swap)以缓冲峰值。sudo yum update -y),并使用 NodeSource 仓库安装较新的 Node.js 版本,获得更好的内存管理与性能特性。二 进程管理与系统层限制
pm2 start app.js --max-memory-restart 4G(超过4GB自动重启)ecosystem.config.js 中设置 max_memory_restart: '2G',按需水平扩展 instances: 'max'。/etc/systemd/system/your-app.service 的 [Service] 段加入:
Environment="NODE_OPTIONS=--max-old-space-size=4096"MemoryMax=4Gsudo systemctl daemon-reload && sudo systemctl restart your-appdocker run -m 4g your-image(容器4GB),同时设置 NODE_OPTIONS=--max-old-space-size=3072(Node 堆3GB),为堆外内存与系统预留空间。三 代码与架构层面的优化
四 监控 诊断与泄漏定位
top -p <pid> 或 htop 观察 RSS、内存占用趋势。process.memoryUsage(),记录 rss、heapUsed、external 等关键指标。node --inspect app.js,在 Chrome DevTools 的 Memory 面板进行堆分析、分配时间线记录。.heapsnapshot 文件并对比分析;生产环境可按需发送信号触发快照。leak 事件,辅助定位增长异常的对象路径。五 实用配置示例
max_memory_restart: '2G'NODE_OPTIONS: '--max-old-space-size=3072'instances: 'max'[Service] 段加入:
Environment="NODE_OPTIONS=--max-old-space-size=3072"MemoryMax=3.5G(略高于堆上限,为堆外与系统预留)sudo systemctl daemon-reload && sudo systemctl restart nodeappdocker run -m 4g your-image(容器4GB),容器内设置 NODE_OPTIONS=--max-old-space-size=3072(Node 堆3GB)。