2012-10-16 20 views
8

NodeJS संस्करण:Node.js - संभव http सर्वर स्मृति रिसाव

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);  

क्लाइंट (PHP स्क्रिप्ट) ऊपर सर्वर के लिए एक पोस्ट अनुरोध चला कर्ल: 0.8.8

यहाँ सर्वर है। पोस्ट एक स्ट्रिंग (जेसन) है, आकार में लगभग 4 मेगाबाइट्स।

जैसा कि आप देख सकते हैं, सर्वर पोस्ट किए गए डेटा के साथ कुछ भी नहीं करता है। डीबग करने के लिए, मैंने अपना पूरा कोड हटा दिया और हैलो वर्ल्ड उदाहरण पर वापस चला गया जो कुछ भी नहीं करता :)
जब मैं नोड प्रक्रिया (गतिविधि मॉनिटर, मैक ऐप में किया गया) के मेमोरी उपयोग को देखता हूं - यह रिपोर्ट करता है कि प्रत्येक अनुरोध के लिए नोड सर्वर मेमोरी उपयोग बड़ा हो रहा है।
तो 20 अनुरोधों के बाद या तो स्मृति उपयोग दोगुना हो गया है।

+4

मैं 1000 डॉलर के सवाल पूछने वाला हूं: क्या node.js अंततः सभी मेमोरी और क्रैश को हॉग करता है या फिर स्मृति उपयोग अंततः कम हो जाएगा? – jsalonen

उत्तर

19

यह एक बग नहीं है। यह सामान्य, अपेक्षित व्यवहार है।

Node.js जावास्क्रिप्ट पर आधारित है, जो एक कचरा-एकत्रित भाषा है। संक्षेप में, क्या होता है, यह है कि स्मृति तुरंत मुक्त नहीं होती है, लेकिन इसके बजाय स्मृति को मुक्त होने तक कुछ समय लगेगा (जैसे कचरा एकत्र किया जाता है)। वी 8 (जो नोड का उपयोग करता है) वास्तव में a very intelligent garbage collector है कि "तेजी से ऑब्जेक्ट आवंटन, शॉर्ट कचरा संग्रहण विराम, और कोई स्मृति विखंडन सुनिश्चित करता है"।

आपके लिए यह व्यवहार प्रदर्शित करने के लिए, मैंने उपरोक्त स्क्रिप्ट को विंडोज़ पर node.js 0.8.8 के साथ चलाया और बड़े HTTP POST अनुरोधों के साथ सर्वर पर हमला किया।

प्रोसेस एक्सप्लोरर निम्नलिखित स्मृति उपयोग ग्राफ से पता चलता है:

enter image description here

आप देख सकते हैं, स्मृति उपयोग ऊपर जाता है, एक निश्चित सीमा है कि कचरा संग्रहण से चलाता है जब तक। सफाई के बाद, उपयोग रीसेट हो जाता है और अगले ट्रिगरिंग तक फिर से चढ़ना शुरू होता है।

+2

मेरे शुरुआती परीक्षणों में, मैंने लगभग 20 अनुरोध किए और स्मृति अभी भी जारी रही। अब, आपके बारे में बहुत ही जानकारीपूर्ण उत्तर पढ़ने के बाद, मैंने अनुरोधों को जारी रखा और लगभग 30 या उसके बाद, जीसी ने लात मार दिया :) – ado

+0

+1 सूचनात्मक चार्ट के लिए - धन्यवाद – zupa

+0

@jsalonen जीसी को समायोजित करने के लिए सीमा को सीमित कर सकता है? – Sir

संबंधित मुद्दे