console.log 居然导致内存泄漏?生产环境调试的隐藏陷阱
调试时随手打的日志,上线后差点把服务器打崩。这不是 console.log 的锅,是用法不对。
事故现场:
// 看似无害的调试代码
function processLargeData(data) {
console.log('处理数据:', data); // data 是 10MB 的 JSON
// 业务逻辑...
return transform(data);
}
// 循环处理 1000 条
items.forEach(item => processLargeData(item));
现象: Node.js 服务内存持续增长,最终 OOM 被 Kill。
排查: Heap Snapshot 发现 console 对象持有大量字符串引用。
为什么会泄露
浏览器环境
// Chrome DevTools 开着时,console 会保留对象引用
// 方便你展开查看,但这也阻止了 GC
const hugeArray = new Array(1000000).fill('x');
console.log(hugeArray); // 即使 hugeArray 离开作用域,DevTools 仍引用它
// 刷新页面才释放
浏览器环境
// Node 的 console 是同步写入 stream
// 如果输出被重定向到文件或管道,且消费速度慢
process.stdout.write = originalWrite; // 假设被慢速消费
console.log(bigObject); // 数据积压在内核缓冲区,引用无法释放

浙公网安备 33010602011771号