जवाबों:
नोड-मेमॉच : Node.JS कोड में मेमोरी लीक का पता लगाने और खोजने। इस ट्यूटोरियल ट्रैकिंग डाउन मेमोरी लीक्स को Node.js में देखें
अंतर्निहित प्रक्रिया मॉड्यूल में एक विधि memoryUsage
है जो वर्तमान Node.js प्रक्रिया की मेमोरी उपयोग में अंतर्दृष्टि प्रदान करती है। यहाँ 64-बिट सिस्टम पर नोड v0.12.2 से एक उदाहरण दिया गया है:
$ node --expose-gc
> process.memoryUsage(); // Initial usage
{ rss: 19853312, heapTotal: 9751808, heapUsed: 4535648 }
> gc(); // Force a GC for the baseline.
undefined
> process.memoryUsage(); // Baseline memory usage.
{ rss: 22269952, heapTotal: 11803648, heapUsed: 4530208 }
> var a = new Array(1e7); // Allocate memory for 10m items in an array
undefined
> process.memoryUsage(); // Memory after allocating so many items
{ rss: 102535168, heapTotal: 91823104, heapUsed: 85246576 }
> a = null; // Allow the array to be garbage-collected
null
> gc(); // Force GC (requires node --expose-gc)
undefined
> process.memoryUsage(); // Memory usage after GC
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4528072 }
> process.memoryUsage(); // Memory usage after idling
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4753376 }
इस सरल उदाहरण में, आप देख सकते हैं कि लगभग 10 एमबी तत्व उपभोक्ताओं की एक सरणी का आवंटन लगभग 80 एमबी है (एक नज़र डालें heapUsed
)।
आप वी 8 के स्रोत कोड को देखो, तो ( Array::New
, Heap::AllocateRawFixedArray
, FixedArray::SizeFor
), तो आप देखेंगे कि एक सरणी द्वारा प्रयुक्त स्मृति एक निश्चित मूल्य से अधिक लंबाई एक सूचक के आकार से गुणा है। बाद वाला 64-बिट सिस्टम पर 8 बाइट्स है, जो पुष्टि करता है कि 8 x 10 = 80MB की स्मृति अंतर मनाया जाता है।
--expose-gc
को gc
फ़ंक्शन की आवश्यकता नहीं है ?
--expose-gc
है process.memoryUsage()
। gc()
(आवश्यकता होती है --expose-gc
) का उपयोग कचरा संग्रह को निर्धारित करने के लिए उत्तर देने में किया गया था ताकि process.memoryUsage
रिपोर्ट देखने में आसान हो सके ।
इसके अलावा, यदि आप नोड प्रक्रिया के बजाय वैश्विक मेमोरी जानना चाहते हैं ':
var os = require('os');
os.freemem();
os.totalmem();
मूल मेमवॉच अनिवार्य रूप से मृत है। इसके बजाय मेमॉच-नेक्स्ट को आज़माएं , जो नोड के आधुनिक संस्करणों पर अच्छी तरह से काम करता प्रतीत होता है।
लिनक्स / यूनिक्स पर (ध्यान दें: मैक ओएस एक यूनिक्स है) उपयोग top
मेमोरी उपयोग द्वारा प्रक्रियाओं को सॉर्ट करने के लिए एम ( Shift+ M) का और दबाएं ।
विंडोज पर टास्क मैनेजर का उपयोग करें।
Applications > Utilities
और आपको एक Activity Monitor
ऐप मिलेगा । वह टास्क मैनेजर के बराबर है। OS X में top
कमांड भी है ।
htop
लिनक्स पर शीर्ष के बजाय का उपयोग करें । यह ज़्यादा बेहतर है।