2014-10-09 70 views
1

我读过几个关于V8内存限制的内容。唉,我还不清楚。也许这很清楚,但我不想相信。这是我的问题:在Node.js应用程序中,V8内存限制可能导致什么坏处?

我有一个Node.js应用程序将托管在一个物理服务器。这个应用程序将基本上是一些视频相关的CPU和内存繁重的工作接口。例如,我使用FFMPEG在此应用程序内转码视频。当这样做时,我使用Node的child_process。特别是.spawn

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

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

我想我需要一些解释如何child_process es工作。

谢谢

回答

-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; 
}); 

如果你现在正在做这样的事情吧,你可能会想要将数据从子进程传输到其他位置,而不是在节点进程内缓冲。

+0

你能否提供一些关于这个缓冲区的细节?也许是一个小例子? – scaryguy 2014-10-09 12:56:17

+0

谨慎解释downvote?无论如何,我已经更新了答案,其中包含可能会导致V8内存限制问题的缓冲示例。 – mscdex 2014-10-09 14:13:55

+0

感谢您的更新mscdex!我猜你会认为这就是我:)不,不是我投票给你的。我接受你的回答,谢谢!但我仍然不清楚如何从一个child_process内部流化stdout?''产生',['-a-gigabyte-of-stdout-output']'这只是一个unix命令? – scaryguy 2014-10-09 14:49:42

相关问题