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.