【问题标题】:What are the bad things that V8 Memory limitation can cause in a Node.js app?V8 内存限制在 Node.js 应用程序中可能导致哪些坏事?
【发布时间】:2014-12-04 09:53:38
【问题描述】:

我已经阅读了几篇关于 V8 内存限制的文章。唉,我还是不清楚。也许很清楚,但我不想相信。这是我的问题:

我有一个 Node.js 应用程序,它将托管在单个物理服务器中。这个应用程序基本上是一些与视频相关的 CPU 和 RAM 繁重工作的接口。例如,我使用 FFMPEG 在此应用程序中对视频进行转码。这样做时,我使用 Node.js 的child_processes。尤其是.spawn

我的问题是; 由于我在 child_process 中运行 CPU 和 RAM 密集型作业,我是否会连接到 V8 内存限制(在正确设置的 64 位系统中为 1.7GB)?

因为我的 FFMPEG 进程将耗尽生产中服务器的几乎所有资源。根据服务器配置,它甚至可能使用 32GB 的内存和数十个虚拟 CPU 内核。

我想我需要解释一下child_processes 的工作原理。

谢谢

【问题讨论】:

    标签: multithreading node.js ffmpeg


    【解决方案1】:

    子进程本身不会影响 V8 的内存使用。但是,如果您在内存中缓冲来自子进程的非常大的输出,则该缓冲区将受到 V8 内存限制的限制。

    缓冲的意思是:

    exec('produce --a-gigabyte-of-stdout-output', function(err, stdout, stderr) {
    });
    

    或用 child_process.spawn() 做类似的事情:

    var proc = spawn('produce', [ '--a-gigabyte-of-stdout-output' ]);
    var buf = '';
    proc.stdout.on('data', function(d) {
      buf += d;
    });
    

    如果您现在正在做这样的事情,您可能想尝试将数据从子进程流式传输到其他地方,而不是在节点进程内缓冲。

    【讨论】:

    • 你能详细介绍一下这个buffering 的东西吗?也许是一个小例子?
    • 想解释一下否决票?无论如何,我已经更新了答案以包含可能导致 V8 内存限制问题的缓冲示例。
    • 感谢更新 mscdex!我猜你会认为那是我:) 不,不是我投了你的票。我接受你的回答,谢谢!但我仍然不清楚如何从 child_process 内部流式传输标准输出?..'produce', [ '--a-gigabyte-of-stdout-output' ] 这只是一个 unix 命令?
    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2014-09-12
    相关资源
    最近更新 更多