一个node.js集群在64位Wintel PC上产生多less个subprocess?

我正在运行一个并发testing,为了简洁起见,为每个欺骗性的http请求定义了一个进程。 它工作得很好,最多64个请求/进程,但折叠65.我正在I5笔记本电脑上运行Window 7(64位),4GB的RAM。

在运行testing时,我打开了一个Chrome浏览器(带有一些标签),我期望操作系统的通用系统进程也会有一些效果,但是我对最低级别的node.js知之甚less,问题在于。

例如,一篇文章显示,在2GB 64位Windows XP系统上可以运行8000多个进程:

http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx

但是我遇到的64个孩子的进程数字相当显眼。

有任何想法吗?

Well节点是异步的,没有阻塞,只能由当前脚本完成,并且可以完美地处理多个连接,所以这意味着在高并发时,它会使用你所有的CPU,但是每个进程只能使用一个内核,因为Node是没有线程。 所以从技术上讲,推荐拥有与核心一样多的进程,每个进程都有一个核心。 在这种情况下,高度并发的节点集群将使用所有的CPU。 如果你走的不止这些,那么你正在浪费你的内存,并在你的操作系统调度程序上增加额外的工作。 除此之外,每个nodejs进程都有启动时间。 所以在运行时创建一个nodejs进程是非常昂贵的。

从Node.JS文档:

这些孩子节点仍然是V8的全新实例。 假设每个新节点至少有30ms启动和10MB内存。 也就是说,你不能创造数千个。

结论最好的办法就是分叉,就像你的CPU核心的数量一样:

var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('death', function(worker) { console.log('worker ' + worker.pid + ' died'); cluster.fork(); }); } else { // Worker processes have a http server. http.server(function(req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8000); } 

我们实际上有一个生产服务器,可以做到这一点,这可能需要大约1000个并发,并且服务hello世界的延迟小于10ms。