2012-10-16 25 views
8

Nodejs sürümünü sızıntı:node.js - olası http sunucusu bellek

var http = require('http'); 
var port = 1338; 
var ip = "127.0.0.1";  

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hi there\n'); 
}).listen(port, ip);  

İstemci (php script) Yukarıdaki sunucuya bir post isteği uzakta kıvrılan: Burada 0.8.8

sunucusudur. POST, yaklaşık 4 megabayt boyutunda bir dize (json) 'dir.

Gördüğünüz gibi, sunucu gönderilen verilerle hiçbir şey yapmaz. Hata ayıklamak için tüm kodumu kaldırdım ve hiçbir şey yapmayan merhaba dünyasına geri döndüm :)
Düğüm sürecinin bellek kullanımını incelediğimde (Activity Monitor, mac app uygulamasında yapılır) düğüm sunucusu bellek kullanımı her istek için daha büyük oluyor.
20 istekden sonra bellek kullanımı iki katına çıkar.

+4

1000 dolarlık soruyu soracağım: node.js sonunda tüm belleği ve kilitlenmeyi yitirir mi yoksa bellek kullanımı nihayetinde azalır mı? – jsalonen

cevap

19

Bu bir hata değil. Bu normal, beklenen davranış.

Node.js, çöp topluluğuna sahip olan JavaScript'i temel almaktadır. Kısacası, ne olur, hafıza hemen boşaltılmaz, bunun yerine hafıza boşalana kadar (ör. Çöp toplanır) biraz zaman alır. V8 (hangi düğüm kullanır) aslında "hızlı nesne ayırma, kısa çöp toplama duraklamaları ve bellek parçalanması sağlamayan" a very intelligent garbage collector'a sahiptir.

Bu davranışı sizin için göstermek için, Windows üzerinde node.js 0.8.8 ile yukarıdaki komut dosyasını çalıştırdım ve sunucuyu büyük HTTP POST istekleriyle birlikte bombardıman ettim.

Process Explorer aşağıdaki bellek kullanımı grafiği ortaya koymaktadır:

enter image description here

Gördüğünüz gibi, bellek kullanımı artar, çöp toplama işlemini tetikler belli bir limitin kadar. Temizleme işleminden sonra kullanım sıfırlanır ve bir sonraki tetiklemeye kadar tekrar tırmanmaya başlar.

+2

İlk testlerimde, yaklaşık 20 istek yaptım ve bellek devam ediyordu. Şimdi, çok bilgilendirici bir cevap okuduktan sonra, yaklaşık 30 ya da öylesine sonra istekleri tuttum, gc bilgilendirici grafik için – ado

+0

+1 attı - Teşekkürler – zupa

+0

@jsalonen ayarlanmış GC için sınırını ayarlayabilirsiniz? – Sir

İlgili konular