Node.js की मेमोरी उपयोग की निगरानी कैसे करें?


जवाबों:


66

नोड-मेमॉच : Node.JS कोड में मेमोरी लीक का पता लगाने और खोजने। इस ट्यूटोरियल ट्रैकिंग डाउन मेमोरी लीक्स को Node.js में देखें


1
नोड-मेमवॉच किसी भी अधिक जीवित नहीं लगता है (आखिरी बार मार्च 2013 में अपडेट किया गया)। क्या कोई विकल्प है?
— गोलो रोडेन

6
@GoloRoden npm मेमॉच-नेक्स्ट वर्क्स ठीक स्थापित करें। यहाँ रेपो है: github.com/marcominetti/node-memwatch
— fre2ak

स्मृति लीक के शिकार के लिए एक और तारीख तक संसाधन apmblog.dynatrace.com/2015/11/04/…
— saintedlama

22
मेमवॉच अब भी बनाए नहीं रखा गया है और नोड के हाल के संस्करण पर काम नहीं करेगा ताकि परेशान न हों।
— माइक


153

अंतर्निहित प्रक्रिया मॉड्यूल में एक विधि 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 की स्मृति अंतर मनाया जाता है।


1
@MestreSan नोड के किस संस्करण --expose-gcको gcफ़ंक्शन की आवश्यकता नहीं है ?
— रॉब डब्ल्यू

1
@MestreSan मैंने कभी नहीं कहा कि आपको इसकी आवश्यकता --expose-gcहै process.memoryUsage()। gc()(आवश्यकता होती है --expose-gc) का उपयोग कचरा संग्रह को निर्धारित करने के लिए उत्तर देने में किया गया था ताकि process.memoryUsageरिपोर्ट देखने में आसान हो सके ।
— डब्ल्यू पर रॉ डब्ल्यू

जेएस-स्टफ को सही तरीके से मापने के लिए यह एक शानदार जवाब है। उस उत्तर के लिए धन्यवाद।
— सुथेर

आपने इस एक के साथ काम किया। मुझे बस कॉलिंग प्रक्रिया द्वारा उजागर सभी तरीकों का एहसास हुआ जो मुझे एक अधिक कुशल एप्लिकेशन बनाने में मदद करेगा। धन्यवाद।
— एंड्रयू

40

इसके अलावा, यदि आप नोड प्रक्रिया के बजाय वैश्विक मेमोरी जानना चाहते हैं ':

var os = require('os');

os.freemem();
os.totalmem();

प्रलेखन देखें


1
हालाँकि, freemem () सर्वर पर उपलब्ध मेमोरी के समान नहीं है। मुफ्त के बजाय उपलब्ध स्मृति खोजने का कोई तरीका?
— एलेक्स

28

मूल मेमवॉच अनिवार्य रूप से मृत है। इसके बजाय मेमॉच-नेक्स्ट को आज़माएं , जो नोड के आधुनिक संस्करणों पर अच्छी तरह से काम करता प्रतीत होता है।


2
राजा मर चुके हैं; लंबे समय तक राजा रहे: npmjs.com/package/node-memwatch
— फ्रैंक मीलानेर

5

लिनक्स / यूनिक्स पर (ध्यान दें: मैक ओएस एक यूनिक्स है) उपयोग top मेमोरी उपयोग द्वारा प्रक्रियाओं को सॉर्ट करने के लिए एम ( Shift+ M) का और दबाएं ।

विंडोज पर टास्क मैनेजर का उपयोग करें।


@majidarif पर जाएं Applications > Utilitiesऔर आपको एक Activity Monitorऐप मिलेगा । वह टास्क मैनेजर के बराबर है। OS X में topकमांड भी है ।
— ingwie फीनिक्स

3
htopलिनक्स पर शीर्ष के बजाय का उपयोग करें । यह ज़्यादा बेहतर है।
— रयान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.