2011-05-30 12 views
5

Node.js oldukça ateşli bir konu olmasına rağmen, Node.js'nin Çöp Toplama modeli (http://amix.dk/blog/post/) nedeniyle gerçek zamanlı uygulama için uygun olmadığı bildirildiğini görebiliyorum. 19.577). Ve, bazı ölçütler Node.js'nin RingoJS'ye göre yavaş yanıt verdiğini göstermektedir (http://hns.github.com/2010/09/29/benchmark2.html).Node.js ölçeklenebilirliği, yüksek yük altındayken çöp toplama nedeniyle zarar görüyor mu?

Şu an için Node.js, jenerasyonel dünyayı durdurucu GC kullanan V8 JavaScript motoruna bağlanmıştır.

Gelen istekler masif olduğunda, Node.js bozulabilir mi? Gerçek üretim istatistikleri varsa, bu daha iyi olurdu.

Teşekkür

+0

GC'nin bir fark yaratması için yeterli bağlantıya sahipseniz, düğümlerinizde ölçeklenen birden fazla işlem olarak düğümü çalıştırıyor olacaksınız. Bu, en azından GC'nin "hasarını" azaltacaktır. – Raynos

+1

Bu, daha fazla iş hacmine yol açabilir; ancak, GC başladığı zaman zaman gecikmeli yüksek gecikme sorununu hafifletmez. –

cevap

2

çöp toplama maliyetidir yığın nesne sayısı, uzun ömürlü nesnelerin özellikle sayısına bağlıdır. Ne kadar çok varsa, GC'de daha fazla zaman harcanır.

Evet, V8 şu anda yığın büyükse bazen büyük boyutlu duraklamalar alabilir. V8 ekibinin, her bir GC duraklamanın maliyetini en aza indirerek çalışmayı yaymak gibi çalıştığı anlaşılıyor. Kendi düğüm programlarınızda GC maliyetini --trace-gc ile başlatabilirsiniz.

Birçok uygulama için, GC'nin maliyeti, giderek daha iyi optimize edilen derleyici tarafından dengelenir. Basit bir program denemeyi ve V8'in bildirdiği gibi GC'nin maliyetini ölçmeyi ve istemciyi istemci gecikme süresini ölçmeyi öneririm. Müşteriler açık internet üzerinden bağlanırken GC maliyetlerinin neredeyse tamamen göz ardı edileceğini gördüm.