ভার্চুয়াল মেমরির আকার শীর্ষের অর্থ কী?


124

আমি topআমার সার্ভারের কর্মক্ষমতা পর্যবেক্ষণ করতে চলেছি এবং আমার 2 টি জাভা প্রক্রিয়া 800MB-1GB অবধি ভার্চুয়াল মেমরি দেখায়। এটা কি খারাপ জিনিস?

ভার্চুয়াল স্মৃতি বলতে কী বোঝায়?

এবং ওহ বিটিডব্লিউ, আমার কাছে 1 জিবি অদলবদল রয়েছে এবং এটি 0% ব্যবহৃত দেখায়। তাই আমি বিভ্রান্ত

জাভা প্রক্রিয়া = 1 টমক্যাট সার্ভার + আমার নিজের জাভা ডেমন সার্ভার = উবুন্টু 9.10 (করমিক)


উত্তর:


142

ভার্চুয়াল মেমরি এমনকি প্রয়োজনীয় স্মৃতি নয় isn't উদাহরণস্বরূপ, যদি কোনও প্রক্রিয়া মেমরির একটি বড় ফাইল ম্যাপ করে তবে ফাইলটি আসলে ডিস্কে সঞ্চিত থাকে তবে এটি এখনও প্রক্রিয়াটিতে "ঠিকানা স্থান" গ্রহণ করে।

ঠিকানা স্থান (অর্থাত্ প্রক্রিয়া তালিকার ভার্চুয়াল মেমরি) কোনও মূল্য ব্যয় করে না; এটা আসল না. আসলটি হ'ল আরএসএস (আরইএস) কলাম, যা আবাসিক স্মৃতি। কোনও প্রক্রিয়া আপনার প্রকৃত স্মৃতি কতটুকু দখল করে।

তবে এটি পুরো উত্তর নয়। যদি কোনও প্রক্রিয়া কাঁটাচামচ () কল করে, এটি দুটি ভাগে বিভক্ত হয়ে যায় এবং উভয়ই প্রাথমিকভাবে তাদের সমস্ত আরএসএস ভাগ করে দেয়। সুতরাং আরএসএসের শুরুতে 1 জিবি থাকলেও, কাঁটাচামচ করার পরে ফলাফলটি দুটি প্রক্রিয়া হবে, যার প্রতিটি আরএসএস 1 গিগাবাইটের সাথে রয়েছে তবে আপনি এখনও কেবল 1 জিবি মেমরি ব্যবহার করতে চাইবেন।

এখনও বিভ্রান্ত? আপনার সত্যিকারের যা জানা দরকার তা এখানে: freeকমান্ডটি ব্যবহার করুন এবং আপনার প্রোগ্রামটি শুরু করার আগে এবং পরে ( +/- buffers/cacheলাইনে) ফলাফলগুলি পরীক্ষা করুন । এই পার্থক্যটি হ'ল আপনার সদ্য চালু হওয়া প্রোগ্রামটি কত নতুন স্মৃতি ব্যবহার করবে।


2
"আপনার প্রোগ্রামটি শুরুর আগে এবং পরে ফলাফলগুলি পরীক্ষা করুন", বিকল্প হিসাবে, ইউএসএস (ইউনিক সেট আকার) ব্যবহার করে smem
হুবার্ট কারিও

সুতরাং এমন একটি সরঞ্জাম রয়েছে যা ব্যবহারের জন্য প্রকৃত পরিমাণের মেমরি দেয়, এমন সরঞ্জামগুলি যা তৃতীয় পক্ষ নয়।
সিএমসিডিগ্রাগনকাই

@ সিএমসিডিগ্রাগনকাই হ্যাঁ, বিনামূল্যে।
ডিভেন্টফ্যান

1
যদি আমি এর মাধ্যমে জাভা প্রক্রিয়া শুরু করি java -Xmx16g RunLong, যা জাভা প্রক্রিয়াটির জন্য 16 গিগাবাইট মেমরি সংরক্ষণ করে, তবে VIRTসর্বোপরি, মনে হয় 16 জিবি গণিত হয়েছে। এই ক্ষেত্রে, এই 16 জিবি মেমরির ধরণটি কী, এটি ম্যাপ করা মেমরি বা ..?
এরিক ওয়াং

1
@ এরিক ওয়াং, সেই স্মৃতি ম্যাপ করা হয়নি। এটি মেমরি সংরক্ষণের জন্য কেবল ওএসের কাছে অনুরোধ যা পরবর্তী সময়ে প্রয়োজন হতে পারে (সম্ভবত কখনই নয়)। (কমপক্ষে) লিনাক্সে, এটি এমএপি_নোরসার্ভ এবং PROT_NONE ফ্ল্যাগের সাথে একটি এমএম্যাপ কল (ওএস :: পিডি_রিজার_মেমরি কল আনোন_ম্যাপ: github.com/AdoptOpenJDK/openjdk-jdk11u/blob/… ); কোনও মেমোরি আসলে ডিফল্টরূপে বরাদ্দ থাকে না - এটি তখন কেবল তখন হয় যখন প্রোগ্রামটি বস্তু বরাদ্দকরণের অনুরোধগুলি পূরণ করার জন্য মেমরির সত্যই প্রয়োজন হয়।
জুরজ মার্টিনকা

23

উপরের (1) ম্যান পৃষ্ঠা থেকে:

o: VIRT  --  Virtual Image (kb)
      The  total  amount  of  virtual  memory  used  by the task.  It
      includes all code, data and shared libraries  plus  pages  that
      have been swapped out.

      VIRT = SWAP + RES.

যেখানে আরইএস অর্থ রিসিডেন্ট মেমরি (শারীরিক স্মৃতি ব্যবহৃত)।

আসলে এটি সঠিক নয় (আর)। যখন এটি "অদলবদল" বলবে তখন এর মধ্যে এমন ফাইলগুলিও অন্তর্ভুক্ত রয়েছে যা প্রোগ্রামটি তার ঠিকানা জায়গাতে ম্যাপ করেছে, যা প্রকৃত র‍্যাম এখনও গ্রহণ করতে পারে বা নাও পারে। এই মেমরিটি ফাইল-ব্যাকড তবে সত্যই অদলবদল নয়।

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


2
ভাল কথাটি আকর্ষণীয়, তাই ভিআইআরটি = সোয়াপ + আরএস, আমার এসওএপিপি ব্যবহারের শূন্যতা কীভাবে আসে, যখন ২ টি জাভা প্রসেসের ভার্চুয়াল মেমরিটি 1 গিগাবাইটের কাছাকাছি থাকে ??
কাপসো

মূলত শীর্ষস্থানীয় অনুষ্ঠানগুলি .... অদলবদল: 1048568k মোট, 0 কে ব্যবহৃত, 1048568k ফ্রি, 505728 কে ক্যাশেড
কাপসো

15
@ user42159 এই উত্তরটি ভুল! ম্যান শীর্ষে নেই 'ভিআইআরটি = সোয়াপ + আরইএস'! -m : VIRT/USED toggle Reports USED (sum of process rss and swap total count) instead of VIRT। এটি অত্যন্ত দুঃখের বিষয় যে আমি এই উত্তরটিকে হ্রাস করতে পারি না।
দুলিশি

3
এই উত্তরটি ভুল। ইউএসএডি = রেজ + + অদলবদল আকার (শীর্ষ ক্ষেত্র পরিচালনা থেকে, শীর্ষে থাকলে চ কী টিপুন অ্যাক্সেস করা যায় Also শীর্ষস্থানীয় পৃষ্ঠা থেকেও)।
জেসন এস

14

আমি মুগুরেল সুমনারিয়ুর কাছ থেকে এই ব্যাখ্যাটি খুব পরিষ্কার পেয়েছি :

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

RESআবাসিক আকারের জন্য দাঁড়ায়, যা কোনও প্রক্রিয়া কতটা প্রকৃত শারীরিক স্মৃতি গ্রাস করে তার সঠিক প্রতিনিধিত্ব। (এটি সরাসরি% এমইএম কলামের সাথেও মিলে।

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


আমি সম্ভবত কেবল পুনরায় কথা বলতে চাই "ভিআইআরটি উপস্থিত মুহূর্তে প্রোগ্রামটি কত মেমরি অ্যাক্সেস করতে সক্ষম তা উপস্থাপন করে।" "ভিআইআরটি বর্তমান মুহুর্তে প্রোগ্রামের পুরো ঠিকানাযোগ্য জায়গার আকারকে উপস্থাপন করে like" ঠিক আছে, এটি এখনও পলিশ ব্যবহার করতে পারে। তবে মুল বক্তব্যটি হ'ল, "কত স্মৃতি" এখনও র‌্যামকে নিয়ে আলোচনা করছি তা ছাপ দিতে পারে, যখন ভিআইআরটির র‌্যামের জায়গার সাথে কোনও সম্পর্ক নেই । প্রকৃতপক্ষে, বড় প্রোগ্রামগুলির মধ্যে প্রায়শই একটি ভিআরটি আকার থাকে যা মোট সিস্টেমের র‌্যাম আকারের একাধিক মাল্টিপল থাকে - কারণ ভিআইআরটি প্রায় পুরোপুরি ফাইল-ব্যাকড অ্যাড্রেস অঞ্চলগুলি (একে একে "ডিস্ক র‌্যাম নয়")।
শে

5

PS / শীর্ষ আউটপুটে ভিআইআরটি কলাম মেমরির ব্যবহার পরিমাপ করতে প্রায় অপ্রাসঙ্গিক। এটি সম্পর্কে চিন্তা করবেন না। অ্যাপাচি ভারী লোড ভিআরটি বনাম আরইএস মেমরি

https://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used


ধন্যবাদ, আমি উদ্বিগ্ন এবং বিভ্রান্ত হয়ে পড়েছিলাম, কারণ অদলবদলের ব্যবহার 0% ছিল, ভার্চুয়াল মেমরি কলামটি খুব বেশি। এবং ভার্চুয়াল মেমরিটি বেশি থাকলেও আমার ব্যবহৃত মোট ২.7 জিবি শারীরিক মেমরির মাত্র ১. 1. জিবি রয়েছে?
ক্যাপসো

2

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

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

আপনার আরও জানা উচিত যে লিনাক্স একই সাথে একাধিক সোয়াপ পার্টিশন এবং / অথবা স্যুপ ফাইল ব্যবহার করতে দেয়। এর অর্থ হ'ল যদি আপনার মাঝে মাঝে মাঝে অসাধারণ পরিমাণ অদলবদলের প্রয়োজন হয় তবে আপনি পুরো সময় বরাদ্দ রাখার পরিবর্তে এই জাতীয় সময়ে অতিরিক্ত অতিরিক্ত অদলবদল সেট আপ করতে পারেন।

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

সূত্র: http://www.faqs.org/docs/linux_admin/x1752.html


1
এই উত্তরটি ভুল ধারণা ছড়িয়ে দেয় যে ভার্চুয়াল মেমরিটি অদলবদল বা পেজিংয়ের সমান। র‌্যামের এক্সটেনশন হিসাবে ডিস্ক ব্যবহার করা ভার্চুয়াল মেমরির পূর্বনির্ধারিত। এবং প্রচুর সিস্টেম রয়েছে (যেমন বেশিরভাগ সোহো রাউটারগুলি) ভার্চুয়াল মেমরি রয়েছে তবে র‌্যামের এক্সটেনশন হিসাবে ডিস্ক ব্যবহার করে না। (এবং এটি কোনও ওপি-র প্রশ্নের উত্তর নয়, যেহেতু তিনি কোনও অদলবুদ্ধি ব্যবহার করছেন না।)
ডেভিড শোয়ার্জ

2

VIRtualশীর্ষ স্তরের কলামটি প্রক্রিয়াটির সুপার স্পেস (সুপার কনজিউশন স্পেস) বোঝায়, যা প্রক্রিয়াটি সম্ভবত রান সময় নেবে না। আর একটি কলাম রয়েছে RESident, যা রানটাইমে প্রকৃত শারীরিক স্মৃতি / প্রক্রিয়া দ্বারা বরাদ্দ স্থানকে বোঝায়।

উভয়ের মধ্যে পার্থক্যের কারণ উদাহরণ দ্বারা বোঝা যায়: প্রক্রিয়াটি যদি নির্দিষ্ট গ্রন্থাগার ব্যবহার করে তবে লাইব্রেরির আকারও এইটিকে সহায়তা করবে virtual-size। তবে, যেহেতু গ্রন্থাগারের কেবলমাত্র একটি অংশ ব্যবহার করা হবে (অর্থাত ব্যবহারের কয়েকটি পদ্ধতি), যাতে এটি সহায়তা করবে resident-size

জন্য পড়ুন আরও তথ্য


0

"ভিআইআরটি" কেবলমাত্র জায়গাকে সম্বোধন করে, আরইএস হ'ল "আসল" মেমরি, তবে "এসইআর" (= ভাগ করা) পরিমাণ "আরইএস" আরএসের অংশ যা অন্যান্য প্রক্রিয়াগুলির সাথে ভাগ করা হয়। সুতরাং বেশিরভাগ প্রক্রিয়ার জন্য, আমি বিশ্বাস করি যে আরইএস থেকে এসএইচআর বিয়োগ করে আপনাকে মেমরির পরিমাণ দেয় যা এই বিশেষ প্রক্রিয়াটির জন্য সত্যই দায়ী।

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