কিভাবে নোড.জেএস এর মেমরি ব্যবহার নিরীক্ষণ করবেন?


উত্তর:


66

নোড-মেমওয়াচ : নোড.জেএস কোডে মেমরি ফাঁস সনাক্ত এবং সন্ধান করুন। এই টিউটোরিয়ালটি নোড.জেজে ট্র্যাকিং ডাউন মেমরি লিক দেখুন


1
নোড-মেমওয়াচ আর জীবিত বলে মনে হয় না (মার্চ ২০১৩ এ শেষ আপডেট হয়েছে)। কোন বিকল্প আছে?
গোলো রোডেন

6
@ গলোরোডেন এনএমপি ইনস্টল মেমোওয়াচ-পরবর্তী কাজ ঠিকঠাক করে। এখানে রেপো: github.com/marcominetti/node-memwatch
fre2ak

আরো আপ টু ডেট সম্পদ মেমরি তথ্য ফাঁসের নিচে শিকার জন্য apmblog.dynatrace.com/2015/11/04/...
saintedlama

22
মেমওয়াচটি আর রক্ষণাবেক্ষণ করা হয় না এবং নোডের সাম্প্রতিক সংস্করণে কাজ করবে না তাই বিরক্তও করবেন না।
মাইক


153

অন্তর্নির্মিত প্রক্রিয়া মডিউলটির একটি পদ্ধতি রয়েছে memoryUsageযা বর্তমান নোড.জেএস প্রক্রিয়াটির মেমরির ব্যবহারের অন্তর্দৃষ্টি দেয়। এখানে 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 }

এই সাধারণ উদাহরণে, আপনি দেখতে পাচ্ছেন যে 10M উপাদানগুলির গ্রাহকদের প্রায় ৮০ মেগাবাইটের অ্যারে বরাদ্দ করা হয় (একবার দেখুন heapUsed)।
আপনি V8 এর সোর্স কোড তাকান থাকেন ( Array::New, Heap::AllocateRawFixedArray, FixedArray::SizeFor), তারপর আপনি দেখতে পাবেন যে একটি অ্যারের দ্বারা ব্যবহৃত মেমরি একটি নির্দিষ্ট মান প্লাস দৈর্ঘ্য একটি পয়েন্টার আকার দ্বারা গুন করা হয়। পরবর্তীটি ৪-বিট সিস্টেমে 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অ্যাপ্লিকেশন পাবেন। এটি একটি টাস্ক ম্যানেজারের সমতুল্য। ওএস এক্স এর topকমান্ডও রয়েছে।
ইঙ্গুই ফিনিক্স

3
htopলিনাক্স শীর্ষে পরিবর্তে ব্যবহার করুন। এটা অনেক ভালো.
রায়ান শিলিংটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.