症状
处理大输入时以 RangeError: Invalid string length 或 ERR_BUFFER_TOO_LARGE 失败,失败前内存陡增。代码把全部内容累积进一个字符串或缓冲区,触到了引擎上限而非应用限制。小输入可用,从而掩盖了该模式直到真实数据到来。
诊断
搜索累加相关的 +=、join、concat;改用 createReadStream 分块处理;先用 du 了解输入大小与上限的关系。
grep -rn "+=\|\.join(\|concat(" src | grep -i "data\|chunk\|buffer"
根因
代码构建了超过运行时上限的单个字符串或缓冲区,因为它把整个输入累积在内存中而非以有界分块处理。
修复
改为流式管道:读取分块、转换后写入文件、套接字或数据库而非拼接。确有硬性上限时,提前检查大小并以明确错误拒绝,而不是让运行时崩溃。
验证
重新处理同一大输入确认以平稳内存完成且无范围错误,再抽查代表性结果,确保流式路径产出正确数据。
常见陷阱
把大文件整体读入内存再处理在数据增长后必然失败;应从设计上采用流式。