Node.js 中 async/await 与流式响应混用导致的内存泄露排查
最近在维护一个文件下载服务时遇到了一个奇怪的问题:服务运行几天后 RSS 内存会涨到几个 G,重启后恢复,但过几天又涨回去。这个服务本身逻辑不复杂,用 Express 提供一个 GET 接口,读取本地文件并通过 fs.createReadStream 管道给响应,中间套了一层 async 函数做权限校验和日志记录。按说流式响应不会把整个文件读进内存,但内存就是持续上涨。用 --inspect 抓了堆快照,发现大量 Buffer 实例挂在 ReadStream 的 _readableState 上,还有一些 ...