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

时间:2011-05-30 12:05:05

标签: node.js garbage-collection scalability

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

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

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

由于

1 个答案:

答案 0 :(得分:2)

垃圾收集的成本取决于堆中对象的数量,尤其是长寿命对象的数量。您拥有的越多,在GC中花费的时间就越多。

是的,如果堆很大,V8目前可能会暂停一些相当大的GC暂停。听起来V8团队正致力于通过扩展工作来最大限度地降低每个GC暂停的成本。您可以通过--trace-gc启动GC来查看自己节点程序中的GC成本。

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