লিনাক্সে কীভাবে মেমরির ব্যবহারের রিপোর্ট করা হয়?


17

পিএস ব্যবহার করে, আমি আকার, ভার্সাইজ (শীর্ষের ভিআইআরটি হিসাবে একই?) এবং আরএসএস (শীর্ষের আরইএসের মতো?) দেখতে পাচ্ছি। (আমি আরও শীর্ষে দেখতে পাচ্ছি এসএইচআর।)

এই বিভিন্ন ক্ষেত্রের অর্থ কী কেউ আমার জন্য সংক্ষিপ্ত করতে পারেন?


আমি বরং এই পৃষ্ঠায় একটি লিঙ্কের চেয়ে একটি দুর্দান্ত সংক্ষিপ্ত দেখতে চাই যা অদৃশ্য হয়ে যেতে পারে যাতে এই পৃষ্ঠাটি একটি রেফারেন্স হিসাবে থাকতে পারে।
জিম হুনজিকার

উত্তর:


34

সংক্ষেপে:

  • ভার্চুয়াল আকার: কোনও প্রক্রিয়া পরিচালনা করছে এমন ঠিকানার জায়গার পরিমাণ। ভার্চুয়াল ঠিকানা স্পেসে পয়েন্টারগুলির মাধ্যমে প্রক্রিয়াটি অ্যাক্সেস করতে পারে এমন সমস্ত কিছু রয়েছে (মেমরি ঠিকানা উল্লেখগুলি) ferences উদাহরণস্বরূপ, যদি আপনার প্রোগ্রামটি আপনার ভিডিও কার্ডের ফ্রেমবাফারে অ্যাক্সেস পায় তবে সেই মেমরিটি ভার্চুয়াল স্পেস প্রক্রিয়াতে ম্যাপ করা হয় এবং একটি ঠিকানা যা একটি পয়েন্টারে সঞ্চিত থাকে। মেমরি-ম্যাপযুক্ত ফাইল এবং বেনামে ম্যাপিংগুলি ভার্চুয়াল ঠিকানা স্থানের আকারেও গণনা করা হয়। খুব সুন্দর সবকিছু ভার্চুয়াল আকারে। আপনি যদি তালিকাভুক্ত সমস্ত ঠিকানার রেঞ্জের আকার যোগ করেন তবে /proc/<pid>/mapsএটি আপনাকে ভার্চুয়াল আকারের প্রায় একই মানটি প্রদান করবে return

  • আবাসিক আকার: মেমরির পরিমাণ যা বিশেষত সেই প্রক্রিয়াটির সাথে সম্পর্কিত যা বর্তমানে মেমরিতে বাস করে। তার মানে, যে পরিমাণ স্মৃতি অদলবদলে নেই। নোট করুন যে প্রক্রিয়াটি চলমান থাকা সত্ত্বেও প্রক্রিয়াটির অংশগুলি অদলবদলের স্মৃতিতে থাকতে পারে। প্রক্রিয়াটি অ্যাক্সেস করার চেষ্টা করলে অপারেটিং সিস্টেমটি এই অঞ্চলগুলিকে অদলবদল থেকে টানবে। এটিতে হিপ, সমস্ত থ্রেডের স্ট্যাক এবং অন্যান্য ব্যক্তিগত ম্যাপিং অন্তর্ভুক্ত করা উচিত। আপনি যদি সন্ধান করেন /proc/<pid>/mapsতবে [stack], [heap]এবং অন্যান্য বেনামে ম্যাপিংগুলি (ফাইল পাথ ছাড়াই) হয় অদলবদল বা আবাসিক আকারে হিসাব।

  • ভাগ করা আকার: একাধিক প্রক্রিয়ার সাথে সম্পর্কিত মেমরির পরিমাণ। উদাহরণস্বরূপ, যদি মেমরিতে লোড হওয়া একই অ্যাপ্লিকেশনটির চারটি উদাহরণ থাকে তবে আপনার কাছে হ্যাপের চারটি উদাহরণ এবং কমপক্ষে চারটি স্ট্যাক থাকবে, প্রতিটি প্রক্রিয়াটির জন্য একটি (এটি আবাসিক স্মৃতি), তবে আপনার কেবলমাত্র একটি উদাহরণ থাকবে প্রোগ্রামের বাইনারি কোড এবং এর লাইব্রেরিগুলি। এটি ভাগ করা স্থান। এতে কেবলমাত্র প্রোগ্রামের বাইনারি কোড এবং এর লাইব্রেরিই অন্তর্ভুক্ত নয়, স্থানীয়করণ ফাইলগুলি, কেবল পঠনযোগ্য প্রোগ্রামের ডেটা, এসআইএসভি এবং পসিক্স ভাগ করে নেওয়া মেমরি বিভাগ, সেমোফোরস ইত্যাদী ... আপনি যদি সন্ধান করেন তবে /proc/<pid>/mapsবেশিরভাগ ম্যাপিংগুলি লাইব্রেরি এবং প্রোগ্রাম ফাইলগুলিতে আবদ্ধ ভাগ করা হয়েছে।

নোট করুন যে ভিআইআরটিতে আরএসএস এবং এসএইচআর এর মিলন রয়েছে এবং সর্বদা তাদের যে কোনও একটির চেয়ে বড় হবে। আরএসএস এবং এসএইচআর উভয় হিসাবেই অঞ্চলগুলি থাকতে পারে।


2
ঘটনাচক্রে, লিনাক্সের সাম্প্রতিক সংস্করণগুলিতে আপনি / proc / <pid> / smaps এ মেমরির ব্যবহারের একটি খুব বিশদ ভাঙ্গা দেখতে পাবেন
বিডোনলান

1
ভাগ করা আকার মেমরি যা ভাগ করা যেতে পারে। যদি কোনও অ্যাপ্লিকেশন লাইব্রেরির একমাত্র ব্যবহারকারী হয় তবে গ্রন্থাগারটি একক প্রক্রিয়া দ্বারা মেমরিতে রাখা হবে। এইভাবে ভাগ করা মেমরিটি "প্রক্রিয়া মালিকানাধীন" মেমরি হতে পারে।
হুবার্ট কারিও

6

জুলিয়ানো উত্তরে:

নোট করুন যে RSS + SHR <= ভিআইআরটি, সর্বদা।

এটা ঠিক মিথ্যা। এসএইচআরতে সমস্ত ভার্চুয়াল মেমরি রয়েছে যা অন্যান্য প্রক্রিয়াগুলির সাথে ভাগ করা যায় এবং আরএসএসে সমস্ত মেমরি শারীরিকভাবে র‌্যামে থাকে যা প্রক্রিয়া দ্বারা ব্যবহৃত হয়।

সুতরাং বর্তমানে র‌্যামে থাকা সমস্ত ভাগ করা মেমরি SHR এবং আরএসএস উভয়ই গণনা করা হয়, সুতরাং SHR + আরএসএসের কোনও অর্থ নেই কারণ এতে নকল গণনা থাকতে পারে।

আরএসএস + এসআরআর> ভিআইআরটি দিয়ে একটি প্রক্রিয়া তৈরি করতে, কেবল একটি বড় ফাইল (1 জিবি) এমএম্যাপ করুন, তারপরে এটি পুরোপুরি পড়ুন: এমএমএপি ফাইলটি র‍্যামে লোড হবে এবং ভিআইআরটি, এসএইচআর এবং আরএসএস প্রতিটিই 1 জিবি এর চেয়ে সামান্য বড় হবে, তাই এসআরআর + আরএসএস> ভিআইআরটি।


হ্যাঁ, এটি অন্য দুটির তুলনায় ভিআইআরটি সম্পর্কে আরও বিবৃতি ছিল। আমার মনে যা ছিল তা হ'ল তাদের যোগফলের চেয়ে আরএসএস এবং এসএইচআর এর ইউনিয়ন সম্পর্কে, অর্থাৎ ভিআইআরটি আরএসএস এবং এসএইচআর উভয়ই রয়েছে। দুর্বল গাণিতিক উপস্থাপনা।
জুলিয়ানো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.