Node.js 中 Stream 背压处理不当导致的内存暴涨与排查实录
线上一个日志聚合服务在运行几天后 RSS 内存会涨到 2GB 以上,最终被 PM2 重启。服务本身不复杂:从 Kafka 消费日志消息,做一点字段清洗,然后写到本地文件再上传对象存储。用 fs.createWriteStream 写文件时没太在意 write() 的返回值,也没有监听 drain 事件。压测时数据量小没问题,生产环境流量上来后内存就压不住了。这个问题在 Node.js 里很典型:可写流的内部缓冲区有上限(highWaterMark),当写入速度快过消费速度时,write() 返回 false...