You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中spawn子进程stdout引发内存占用持续飙升问题求助

Node.js spawn启动持续运行命令时内存持续攀升问题

现象描述

使用Node.js的spawn方法启动一个预期持续运行的命令(例如FFmpeg),该命令会持续向输出传输数据,但Node.js应用的内存占用会不断攀升,无法稳定下来。

可复现代码

空实现的data监听触发内存泄漏

const runCommand = () => {
    const command = 'FFMPEG COMMAND HERE';
    let ffmpeg = spawn(command, [], { shell: true });

    ffmpeg.on('exit', function(code) { code = null; });
    ffmpeg.stderr.on('data', function (data) { data = null; });
    ffmpeg.stdout.on('data', function (data) { data = null; });
};

将stdout管道到/dev/null仍无法解决

const runCommand = () => {
    const command = 'FFMPEG COMMAND HERE';
    let ffmpeg = spawn(command, [], { shell: true });

    ffmpeg.on('exit', function(code) { code = null; });
    ffmpeg.stderr.on('data', function (data) { data = null; });

    ffmpeg.on('spawn', function () {
       ffmpeg.stdout.pipe(fs.createWriteStream('/dev/null'));
    });
};

排查结论

  • 移除stdout的data事件监听函数后,内存增长问题完全消失
  • 命令输出的数据为Buffer对象
  • 问题根源与spawn输出流的背压机制相关:调整FFmpeg命令降低chunk发送频率后,内存增长速度有所减缓,但仍无法彻底阻止内存攀升

内容的提问来源于stack exchange,提问作者Soroush Bgm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:40:37