Node.js 中 fs.readFile 与流式读取的性能陷阱:一个真实日志分析服务的优化记录
线上有个日志分析服务,定期读取 Nginx access log 做统计聚合。最初实现很简单:fs.readFile 一次性把整个日志文件读进内存再 split('\n') 处理。单文件 200MB 左右时运行正常,直到某天运维把日志轮转策略从每天一次改成每小时一次,单个文件虽然变小了,但部分历史文件因为迁移合并出现了 2GB 以上的大文件,服务开始频繁 OOM。排查后发现 readFile 会把整个文件内容加载为 Buffer,一个 2GB 文件在 V8 堆外内存中占用 2GB,加上字符串转换和 spli...