নোড.জেএসস প্রক্রিয়া.মোমরি ইউজেজ () এর রিটার্ন মানগুলি কীসের জন্য দাঁড়ায়?


132

অফিসিয়াল ডকুমেন্টেশন ( উত্স ) থেকে:

process.memoryUsage ()

বাইটগুলিতে পরিমাপ করা নোড প্রক্রিয়াটির মেমরির ব্যবহারের বিবরণ দেয় এমন কোনও বস্তু প্রদান করে।

var util = require('util');

console.log(util.inspect(process.memoryUsage()));

এটি উত্পন্ন করবে:

{ rss: 4935680, heapTotal: 1826816, heapUsed: 650472 }

হিপটোটাল এবং হিপ ইউজড ভি 8 এর স্মৃতি ব্যবহারের উল্লেখ করে।

ঠিক কীভাবে আরএসএস , হিপটোটাল এবং হেপ ইউজডের পক্ষে দাঁড়ায়?

এটি একটি তুচ্ছ প্রশ্নের মতো মনে হতে পারে তবে আমি সন্ধান করছি এবং আমি এখনও পর্যন্ত এর একটি পরিষ্কার উত্তর খুঁজে পাইনি।

উত্তর:


156

এই প্রশ্নের উত্তর দেওয়ার জন্য, আপনাকে প্রথমে ভি 8 এর মেমরি স্কিমটি বুঝতে হবে।

একটি চলমান প্রোগ্রাম সর্বদা স্মৃতিতে বরাদ্দ কিছু স্থানের মাধ্যমে প্রতিনিধিত্ব করা হয়। এই স্থানটিকে রেসিডেন্ট সেট বলে । ভি 8 জাভা ভার্চুয়াল মেশিনের মতো স্কিম ব্যবহার করে এবং মেমরিটিকে বিভাগগুলিতে বিভক্ত করে:

  • কোড : আসল কোডটি কার্যকর করা হচ্ছে
  • স্ট্যাক : সমস্ত মান প্রকার (পূর্ণসংখ্যা বা বুলিয়ানের মতো আদিমগুলি) রয়েছে পয়েন্টারগুলির সাথে হিপগুলিতে পয়েন্টারগুলি উল্লেখ করে এবং প্রোগ্রামের নিয়ন্ত্রণ প্রবাহকে সংজ্ঞায়িতকারী পয়েন্টারগুলি থাকে
  • হিপ : একটি মেমরি বিভাগ যা রেফারেন্স প্রকারের অবজেক্ট, স্ট্রিং এবং ক্লোজারগুলির মতো সঞ্চয় করতে উত্সর্গীকৃত। এখানে চিত্র বর্ণনা লিখুন

এখন প্রশ্নের উত্তর দেওয়া সহজ:

  • আরএসএস : আবাসিক সেট আকার
  • হিপটোটাল : গাদা মোট আকার
  • heapUsed : গাদা আসলে ব্যবহৃত

রেফ : রেফ : http://apmblog.dynatrace.com/2015/11/04/ বোঝা-garbage-colલેક્- এবং- হান্টিং-মেমরি- লিক্স- ইন- নোড-js/


41
একটি চিত্রের মূল্য 1000 শব্দ হতে পারে be
বমাকনফটন

8
@ বিম্যাকনফটন এটির 1013 শব্দের মূল্য :)
অ্যালেক্স

2
[আরএসএস, হিপটোটাল, হিপ ইউজড] => মেগাবাইটের আকার? কিলোবাইট? আপনি কি আপনার উত্তরে এটি যুক্ত করতে পারেন? তারা সব একই ইউনিট হয়?
আলেকজান্ডার মিলস

হিপটোটাল কীভাবে নোড দ্বারা পরিচালিত হয়? আমার অ্যাপ্লিকেশনটিতে আমি হিপটোটাল স্থিরভাবে উপরে উঠতে দেখছি (জিসি নির্বিশেষে) হিপ ইউজ অবধি আবদ্ধ রয়ে গেছে। হিপটোটালটি নোডের মাধ্যমে কীভাবে পরিচালিত হয় তার কোনও ব্যাখ্যা আমি দেখিনি ... আমি অনুমান করি এটি ভবিষ্যতের বরাদ্দের জন্য কেবল সংরক্ষিত হিপ, তবে এর কোনও কি কখনও মুক্তি পেয়েছে (যদি ব্যবহার না করা হয়)? কী কারণে এটি বেশি থাকবে?
লজিডেলিক

1
প্রক্রিয়াতে একটি নতুন সম্পত্তি "বাহ্যিক" রয়েছে

39

আরএসএস হ'ল রেসিডেন্ট সেট আকার , র‌্যামে রাখা প্রক্রিয়াটির মেমরির অংশ (অদলবদল স্থান বা ফাইল সিস্টেমের অংশের বিপরীতে) opposed

গাদা মেমরি অংশ যেখান থেকে সদ্য বরাদ্দ বস্তু থেকে আসবে (মনে mallocসি, বা newJavaScript এ)।

আপনি উইকিপিডিয়ায় গাদা সম্পর্কে আরও পড়তে পারেন ।


4
আমি মনে করি না এটি মোট স্মৃতি। আমার মেশিনে মোট মেমোরি 8 জিবি, তবে যখন আমি একটি সাধারণ নোড প্রক্রিয়া চালিত করি তখন আরএসএস 13MB প্রায় দেখায়, তাই আমি মনে করি এটি সত্যিই দেখায় যে এই প্রক্রিয়াটি র‌্যামে কতটা মেমরি ধারণ করে।
স্টেফান

1
@ স্টেফান ঠিক আছে, আমি তখন কিছু প্রকার বাগ পেলাম তবে আরএসএস এখন আমার কাছে বিশ্বাসযোগ্য বলে মনে হচ্ছে।
মাহন

4
মধ্যে পার্থক্য কি heapTotalএবং heapUsed?
তিবলু

3
heapTotalগতিশীল বরাদ্দের জন্য @tiblu অন্তর্নিহিত ভি 8 ইঞ্জিনের দ্বারা মোট বরাদ্দ হওয়া হ্যাপ স্পেস space heapUsedমোট স্থানের মধ্যে ব্যবহৃত স্মৃতি। উভয়ই ভি 8 দ্বারা পরিচালিত হয় এবং যখনই প্রয়োজন হয় বৃদ্ধি / সঙ্কুচিত করা যায়।
ইলিয়াস-ভ্যাহ

4
একটি চিত্র যা বিভিন্ন মেমরি স্পেসগুলিকে কল্পনা করে তোলে
এলিয়াস-ভ্যাহ

7

Node.js doumentation তা বর্ণনা নিম্নরূপ:

হিপটোটাল এবং হিপ ইউজড ভি 8 এর স্মৃতি ব্যবহারের উল্লেখ করে। বাহ্যিক জাভাস্ক্রিপ্ট অবজেক্টে ভি 8 দ্বারা পরিচালিত সি ++ অবজেক্টের মেমরির ব্যবহার বোঝায়। আরএসএস, আবাসিক সেট আকার , প্রক্রিয়াটির জন্য প্রধান মেমোরি ডিভাইসে (এটি মোট বরাদ্দ মেমরির একটি উপসেট) व्यापিত স্থানের পরিমাণ, যার মধ্যে হিপ, কোড বিভাগ এবং স্ট্যাক অন্তর্ভুক্ত থাকে।

সমস্ত উল্লিখিত মান বাইটে প্রকাশ করা হয়। সুতরাং, আপনি যদি কেবল এগুলি মুদ্রণ করতে চান তবে আপনি সম্ভবত এমবিতে তাদের পুনরুদ্ধার করতে চান:

const used = process.memoryUsage();
for (let key in used) {
  console.log(`Memory: ${key} ${Math.round(used[key] / 1024 / 1024 * 100) / 100} MB`);
}

এটি আপনাকে একটি আউটপুট দেবে:

Memory: rss 522.06 MB
Memory: heapTotal 447.3 MB
Memory: heapUsed 291.71 MB
Memory: external 0.13 MB

0

এর একটি উদাহরণ দিয়ে এটি করা যাক

নিম্নলিখিত উদাহরণটি আপনাকে প্রদর্শন করবে যে মেমরির ব্যবহারের বৃদ্ধি কীভাবে প্রকৃতপক্ষে rssএবং বৃদ্ধি করবেheapTotal

const numeral = require('numeral');
let m = new Map();
for (let i = 0; i < 100000; i++) {
    m.set(i, i);
    if (i % 10000 === 0) { 
        const { rss, heapTotal } = process.memoryUsage();
        console.log( 'rss', numeral(rss).format('0.0 ib'), heapTotal, numeral(heapTotal).format('0.0 ib') )
    } 
}

উপরের রান করা আপনাকে এরকম কিছু দেবে:

rss 22.3 MiB 4734976 4.5 MiB
rss 24.2 MiB 6483968 6.2 MiB
rss 27.6 MiB 9580544 9.1 MiB
rss 27.6 MiB 9580544 9.1 MiB
rss 29.3 MiB 11419648 10.9 MiB
rss 29.3 MiB 11419648 10.9 MiB
rss 29.3 MiB 11419648 10.9 MiB
rss 32.8 MiB 15093760 14.4 MiB
rss 32.9 MiB 15093760 14.4 MiB
rss 32.9 MiB 15093760 14.4 MiB

এটি আপনাকে পরিষ্কারভাবে দেখায় যে কীভাবে চলক ব্যবহার করা এবং এটির দ্বারা প্রয়োজনীয় স্থানটি ক্রমাগত বৃদ্ধি করা হিপটোটাল এবং আনুপাতিকভাবে আবাসিক সেট আকার ( rss) বৃদ্ধি করে

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