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


উত্তর:


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.