优化代码逻辑,减少内存占用
let/const声明函数内变量),并在不再需要时将其设置为null(如data = null),帮助垃圾回收器回收内存。element.removeEventListener)、清除定时器(如clearTimeout/clearInterval)、避免闭包引用外部变量(如不必要的DOM元素引用)。Map(查找/删除操作时间复杂度O(1))代替普通对象({}),Set(存储唯一值)代替数组(去重需遍历),提升内存使用效率。import()语法实现代码分割,或通过IntersectionObserver实现图片懒加载,减少初始内存占用。利用工具监控与分析内存使用
Memory面板,使用Take heap snapshot(堆快照)查看内存中的对象分布,识别占用内存最多的对象(如未释放的DOM节点、缓存数据);Performance面板监控内存随时间的变化,找出内存泄漏的代码段(如持续增长的内存占用)。process.memoryUsage()方法输出当前进程的内存使用情况(包括rss(常驻内存)、heapUsed(堆内存使用量)、external(外部内存,如Buffer)),定期打印该信息可快速定位内存异常。heapdump(npm install heapdump)生成堆快照(如heapdump.writeSnapshot('/tmp/snapshot.heapsnapshot')),通过Chrome DevTools分析快照中的对象引用链;使用memwatch-next(npm install memwatch-next)监控内存泄漏(如memwatch.on('leak', (info) => console.error(info))),及时发现内存增长异常。调整Node.js启动参数,限制内存使用
--max-old-space-size参数限制V8引擎老生代(存储长期存活对象)的最大内存,避免单个进程占用过多内存导致系统崩溃。例如,将老生代内存设置为4GB:node --max-old-space-size=4096 app.js;或通过NODE_OPTIONS环境变量设置(推荐):export NODE_OPTIONS="--max-old-space-size=4096",再运行应用。--max-new-space-size参数限制V8引擎新生代(存储短期存活对象,如函数调用栈、局部变量)的最大内存,默认约0.5GB。对于内存密集型应用,可适当增大(如--max-new-space-size=2048),提升新生代垃圾回收效率。优化数据处理方式,降低内存峰值
fs.createReadStream逐块读取数据(如readStream.on('data', (chunk) => { /* 处理数据块 */ })),处理完一块后释放内存,显著降低内存峰值。node-cache库)减少重复计算或数据库查询。设置合理的缓存过期时间(如myCache.set('key', 'value', 10000)表示缓存10秒),避免缓存无限增长占用内存。objA.ref = objB; objB.ref = objA)会导致垃圾回收器无法回收,需手动打破循环(如在对象销毁时将引用设为null),防止内存泄漏。系统级配置与进程管理
free -m查看交换空间使用情况,若swap使用率过高(如超过50%),可创建更大的交换文件(如sudo fallocate -l 2G /swapfile,sudo chmod 600 /swapfile,sudo mkswap /swapfile,sudo swapon /swapfile),并添加到/etc/fstab实现开机自动挂载。nvm管理:nvm install --lts),提升内存使用效率。pm2 start app.js --max-memory-restart 4096M,内存超过4GB时自动重启)和实时监控(pm2 monit查看内存、CPU使用情况),提升应用的稳定性和内存利用率。