Node.js的可扩展性是否因高负载下的垃圾收集而受到影响?

尽pipeNode.js是一个相当热门的话题,但我碰巧发现,由于其垃圾收集模型(http://amix.dk/blog/post/19577),Node.js可能不适合实时应用程序。 。 而且,一些基准testing显示,与RingoJS(http://hns.github.com/2010/09/29/benchmark2.html)相比,Node.js响应速度较慢。

目前,Node.js被绑定到V8 JavaScript引擎,它使用世代停止的GC。

那么,当传入的请求很大时Node.js会被破坏吗? 如果有真实的生产数据,那会更好。

谢谢

垃圾收集的成本取决于堆中的对象数量,特别是长寿命对象的数量。 你越多,花在GC上的时间就越多。

是的,如果堆很大,V8目前可以进行一些相当大的GC暂停。 这听起来像V8团队正在努力通过分散工作最大限度地减less每个GC暂停的成本。 你可以在自己的节点程序中看到GC的开销,用--trace-gc

对于许多应用程序来说,GC的成本被日益优化的优化编译器所抵消。 我build议尝试一个简单的程序,并测量V8报告的GC的成本以及测量客户端到客户端的延迟。 我发现当客户通过开放的互联网连接时,GC成本几乎完全可以忽略不计。