কেন লিনাক্স অদ্ভুতভাবে "ফ্রি" মেমরির প্রতিবেদন করছে?


44

ইউনিক্স অপারেটিং সিস্টেমগুলি কীভাবে মেমরির ব্যবহারের প্রতিবেদন করে সে সম্পর্কে এটি একটি সাধারণ প্রশ্ন
অনুরূপ প্রশ্ন:

আমার প্রোডাকশন সার্ভার রয়েছে যা ডিবিয়ান 6.0.6 স্ক্যুইজ চালাচ্ছে

# ইউনাম -এ

Linux debsrv 2.6.32-5-xen-amd64 #1 SMP Sun Sep 23 13:49:30 UTC 2012 x86_64 GNU/Linux

প্রতিদিন ক্রোন রুট হিসাবে ব্যাকআপ স্ক্রিপ্ট চালায়:

# ক্রন্টব -ই

0 5 * * * /root/sites_backup.sh > /dev/null 2>&1

# ন্যানো / রুট / সাইট_ব্যাকআপ.শ

#!/bin/bash
str=`date +%Y-%m-%d-%H-%M-%S`
tar pzcf /home/backups/sites/mysite-$str.tar.gz /var/sites/mysite/public_html/www
mysqldump -u mysite -pmypass mysite | gzip -9 > /home/backups/sites/mysite-$str.sql.gz
cd /home/backups/sites/
sha512sum mysite-$str* > /home/backups/sites/mysite-$str.tar.gz.DIGESTS
cd ~

সবকিছু নিখুঁতভাবে কাজ করে তবে আমি লক্ষ্য করেছি যে মুনিনের স্মৃতি গ্রাফ ব্যাকআপের পরে ক্যাশে এবং বাফারগুলির বৃদ্ধি দেখায় ।

তারপরে আমি কেবল ব্যাকআপ ফাইলগুলি ডাউনলোড করি এবং সেগুলি মুছি। মোছার পরে মুনিনের স্মৃতি গ্রাফটি ব্যাকআপের আগে থাকা অবস্থায় ক্যাশে এবং বাফারগুলি ফিরিয়ে দেয়।

এখানে মুনিন গ্রাফ:

বাহ্যিকভাবে হোস্ট করা চিত্রটি একটি মৃত লিঙ্ক ছিল।


3
অভিনন্দন, এই প্রশ্নটি সংশ্লেষিত হয়েছে (এটি আজ 6th ষ্ঠ ব্যক্তির মতো এটি সম্পর্কে জিজ্ঞাসা করা হয়েছে, এবং এটির মধ্যে সবচেয়ে আকর্ষণীয় এবং
সুন্দরতম

উত্তর:


27

এটি একই "সমস্যা" হিসাবে সার্ভারের কাছ থেকে এই সাইটে অদলবদল বিভাজন এবং অন্যান্য কয়েকটি অনুরূপ প্রশ্ন ব্যবহার করতে অস্বীকার করেছে । ( উচ্চ মেমরি লিনাক্স সার্ভার ব্যবহারের , Linux এ মেমোরি ব্যবহার , ওয়েব সার্ভার মেমরি মধ্যে কম চলমান , ইত্যাদি)

মেমরির খরচটি ক্যাশে থেকে এসেছে সেদিকে মনোযোগ দিন । এর অর্থ এটি কোনও ফাইলকে মেমোরিতে রাখছে। ক্যাশেড মেমরিটি "ফ্রি" মেমরি। মেমরির ব্লকটি খালি রাখার পরিবর্তে, আপনার ওএস সম্প্রতি সেই ফাইলটিতে পড়া ফাইলগুলি রাখছে। যদি কোনও অ্যাপ্লিকেশনটির সেই মেমরির প্রয়োজন হয় তবে এটি অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হবে। ততক্ষণে এটি যদি আপনার প্রায়শই উল্লেখ করা হয় তবে ডিস্ক থেকে কোনও ফাইল পুনরায় পড়তে বাঁচানোর সুযোগ দাঁড়ায় stands

এই গ্রাফ অনুসারে, গ্রাফের পুরো সময়কালের জন্য আপনার কার্যকর মেমরির খরচ মোটেও পরিবর্তিত হয়নি।


সার্ভারকে এই ফাইলগুলি ক্যাশে না করার নির্দেশ দেওয়া সম্ভব? আমার ধারণা sync; echo 3 > /proc/sys/vm/drop_cachesব্যাকআপের পরে কি আমার চালানো উচিত ?

13
@ stan31337 হ্যাঁ, এটি সম্ভব, আপনার এটি করা উচিত নয় । মেমরির এই ফাইলটি রাখার জন্য আপনার কোনও মূল্য নেই। আপনি যদি আপনার সমস্ত ক্যাশে সাফ করেন তবে ক্যাশ করা প্রতিটি ফাইল এবং ডিস্ক থেকে আবার পড়তে হবে কেবল আপনার সিস্টেমকে ধীর করে দেবে। এটি যা করার জন্য ডিজাইন করা হয়েছিল তা করতে দিন।
জেফ ফেরল্যান্ড

2
@ stan31337 আপনি যখন আপনার ব্যাকআপ ফাইলটি মুছবেন তখন ওএস স্বয়ংক্রিয়ভাবে এটি ক্যাশে থেকে কিক করে দেয় (এ কারণেই এটি মুছে ফেলার পরে আপনার ফ্রি মেমরি আবার ঝাঁপিয়ে পড়ে) - লিনাক্স এতটা স্মার্ট যে কোনও ফাইল খোলা নেই এবং পারে না ফাইল সিস্টেম ট্রি থেকে পৌঁছে আবার কখনও অ্যাক্সেস পাবেন না। জেফের মতো বলেছিল যে আপনি অবশ্যই আপনার পুরো এফএস ক্যাশেটি ডাম্প করতে চান না (সিস্টেমটিকে কেবলমাত্র সেই ডেটাটি পুনরায় পড়তে হবে এবং পুনরায় ক্যাশে করতে হবে যা ডিস্ক থেকে ডেটা, যা আসলে আপনার সার্ভারকে কিছু সময়ের জন্য ধীর করে দেবে)
ভোরেটাক 7

61

আপনি লিনাক্স এট মাই রাম সমস্যাটি অনুভব করছেন ।

আতঙ্কিত হবেন না।

এটা কোন সমস্যা না.

আপনার সিস্টেম ডিজাইন হিসাবে কাজ করছে।

সমস্যাটি আপনার ওএস নয় - সমস্যাটি হ'ল "ফ্রি" মেমরিটি কী।


ইউনিক্স সিস্টেমগুলি কেবল চলমান প্রোগ্রামের চেয়ে মেমরি ব্যবহার করে। স্মৃতিটি এর জন্য ব্যবহৃত হতে পারে:

  • চলমান প্রোগ্রাম (সক্রিয় / ব্যবহৃত)
  • ট্রানজিটে বাফারিং ডেটা (বাফার)
  • ক্যাশিং ডেটা সম্প্রতি / থেকে ডিস্কে লিখিত (ক্যাশে)
  • একেবারে কিছুই (নিখরচায়)

আধুনিক ইউনিক্স সিস্টেমগুলি কীভাবে র্যাম ব্যবহারের প্রতিবেদন করে তার একটি সংক্ষিপ্ত (এবং বেশিরভাগ অসম্পূর্ণ) সফরটি যা অনুসরণ করে তা।

ফ্রি মেমরি (ওএস সংজ্ঞা) কী?

যখন কোনও ইউনিক্স সিস্টেম র‌্যামকে ফ্রি হিসাবে প্রতিবেদন করে তখন এর অর্থ "আমি এই র‌্যামটি কোনও কিছুর জন্য ব্যবহার করছি না"।
নিখরচায় র‌্যাম কার্যকরভাবে মূল্যহীন - এটি আপনার সিস্টেমে দ্রুত তৈরি করছে না, কোনও কিছুর প্রয়োজন হলে এটি "মুক্ত" হয়ে বসে আছে। আমি উপরে উল্লিখিত অন্য তিনটি আইটেমের মধ্যে যে কোনও কিছু হতে পারে।

ক্যাশে এবং বাফার মেমরি কী?

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

অ্যাক্টিভ মেমরি কী?

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

নিষ্ক্রিয় স্মৃতি কী?

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

"ব্যবহৃত" মেমরিটি কী (হিউম্যান সংজ্ঞা)

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

"ফ্রি" মেমরি (হিউম্যান সংজ্ঞা) কী?

আপনি এবং আমি "মুক্ত" মেমরি হিসাবে যা মনে করি তা হ'ল প্রোগ্রামগুলি চালনার জন্য উপলব্ধ মেমরি।
এটি আপনার ওএস রিপোর্টগুলির "ফ্রি" চিত্রের চেয়ে কিছুটা জটিল। কোনও প্রোগ্রাম যখন র‌্যামের জন্য জিজ্ঞাসা করে তখন অপারেটিং সিস্টেম সেই র‌্যামটি সর্বনিম্ন বিঘ্নজনকভাবে পাওয়ার চেষ্টা করবে:

  • যদি ফ্রি মেমরি উপলব্ধ থাকে (কিছু না করে বসে থাকা) যে র‍্যাম বরাদ্দ করা হবে।
  • যদি কোনও নিখরচায় মেমরি উপলব্ধ না থাকে তবে ওএস ক্যাশে এবং বাফার স্থানটিকে ন্যূনতম করতে পারে: বাফার পুলের মধ্যে সর্বনিম্ন / সর্বনিম্ন-ঘন ঘন অ্যাক্সেস করা জিনিসগুলি টস আউট করা হবে এবং সেই প্রোগ্রামটি র‌্যাম দেওয়া হয়েছে given
  • অদলবদল করতে গেলে বাফার / ক্যাশে র‌্যাম না থাকলে নিষ্ক্রিয় মেমোরিটি দেখে এবং যে অঞ্চলগুলি মনে হয় যে এটি অ্যাক্সেস হওয়ার সম্ভাবনা কম রয়েছে তা বেছে নেবে। সেই ডেটাটি অদলবদল করতে (ডিস্ক) পেজ আউট করা হবে এবং প্রোগ্রামকে দেওয়া সদ্য-মুক্ত র‌্যাম।
  • যদি সমস্ত নিষ্ক্রিয় র‌্যাম অদলবদল হয়ে যায় তবে সোয়াপারটি ডিস্কে অ্যাক্টিভ র‌্যাম লাগানো শুরু করবে।
    (এটি যেখানে পারফরম্যান্স সাধারণত কুকুরের দিকে যায়: প্রতিবার কোনও প্রোগ্রাম সিপিইউতে পরিণত হওয়ার সাথে সাথে তার অদলবদল বিটগুলি আবার র‌্যামে ফিরিয়ে আনা প্রয়োজন, যার অর্থ অন্য কোনও প্রোগ্রামের অ্যাক্টিভ মেমোরিটি সরিয়ে নেওয়া উচিত - অদলবদলে উচ্চ টার্নওভারকে থ্রেশিং বলা হয় )
  • যদি সিস্টেমটি যা যা করতে পারে তার সব কিছু অদলবদল করে (এবং স্ব্যাপ পার্টিশনটি পূরণ করে), বা আপনি যদি কোনও সোয়াপ বিভাজন ছাড়াই কোনও সিস্টেম চালাচ্ছেন , খারাপ জিনিসগুলি ঘটে। এই মুহুর্তে দুটি জিনিসের একটি ঘটবে:
    • malloc()ফেল করবে. এটি POSIX- অনুসারে আচরণ - অপারেটিং সিস্টেমটি র‌্যামের জন্য জিজ্ঞাসা করা প্রোগ্রামটিকে বলবে যে এটি অনুরোধটি পূরণ করতে পারে না।
      প্রোগ্রামটি হয় কম র‌্যামের জন্য জিজ্ঞাসা করতে পারে, বা যদি এটি মেমরির একটি ছোট অংশ দিয়ে না করতে পারে তবে এটি পরিষ্কার হয়ে যায় এবং প্রস্থান করতে পারে। (প্রোগ্রামটি যদি খারাপভাবে লেখা থাকে তবে তা কেবল ক্রাশ হয়ে যাবে))
    • আপনি যদি লিনাক্স বাক্সে থাকেন তবে ওওএম-কিলার অনুরোধটি পূরণের জন্য পর্যাপ্ত র‌্যাম মুক্ত করার চেষ্টা করার জন্য অন্যান্য প্রক্রিয়াগুলি বন্ধ করে গ্যাং স্টাইলে ড্রাইভ করতে পারে ree
      আপনি যদি এখানে আমার বিবরণ এবং লিঙ্কযুক্ত প্রশ্নের উত্তর সম্পর্কে উত্তর দিতে না পারেন তবে আমি মনে করি সমস্যাটি মোকাবেলার জন্য এটি একটি ভয়ঙ্কর উপায়।

আপনি যখন ফাইলগুলি মুছবেন তখন ফ্রি র‌্যাম কেন উপরে যাবে?

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


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

@ stan31337 আপনি কেবল এটির জন্যই অস্পষ্ট নন - উইন্ডোজ ব্যাকগ্রাউন্ড থেকে আগত লোকদের পক্ষে এটি বিশেষত কঠিন কারণ আপনি যদি এটির মধ্যে এটি না ছড়িয়ে দেন তবে উইন্ডোজ এই স্তরের বিশদ সহ মেমরির ব্যবহারের প্রতিবেদন করে না - এটি কেবল "ব্যবহৃত" (প্রোগ্রামগুলি দ্বারা) ) এবং "ফ্রি" (প্রোগ্রামগুলি গ্রহণের জন্য)। ম্যাক ব্যবহারকারীরা এটি কিছুটা সহজ করেছেন কারণ ক্রিয়াকলাপ মনিটর মূলত একটি গ্রাফিক্যাল সংস্করণ topএবং ফ্রি / ওয়্যার্ড / অ্যাক্টিভ / অ্যাক্টিভ র‌্যামের প্রতিবেদন করে।
voretaq7

আমি উইন্ডোজটিতে প্রসেস এক্সপ্লোরারের সাথে কাজ করতাম , এটিতে প্রচুর মেমোরি জিনিস ছিল, তবে তাদের বেশিরভাগই আমার কাছে এতটাই অস্পষ্ট ছিল যে আমি আসলে তাদের

2
এছাড়াও, এটি লক্ষ করা উচিত, যে উইন্ডোজ সাধারণত এটি এত বেশি বিবরণে প্রদর্শন করে না , তবে এটির একটি খুব অনুরূপ সেটআপ রয়েছে।
জোচিম সৌর

আপনি জানেন, এমনকি উইন্ডোজে মেমরি রিডআউট বিভ্রান্তিকর। এটি এমন কিছু যা ওএস নির্মাতারা আরও বেশি জোর দেওয়া বা তার পরিবর্তে ব্যবহারকারীদের বর্তমানে তাদের তুলনায় কম যত্ন নেওয়া উচিত।
gparent

2

উপরেরটি ব্যর্থ হয়েছে কিনা তা পরীক্ষা করার জন্য অন্য কিছু:

স্ল্যাব ক্যাশে (এর ব্যবহারের পরিমাণ চেক Slab:, SReclaimable:এবং SUnreclaim:মধ্যে /proc/meminfo)। এটি ইন-কার্নেল ডেটা স্ট্রাকচারের একটি ক্যাশে এবং রিপোর্ট করা পৃষ্ঠার ক্যাশে থেকে পৃথক free

যদি আপনার "অনুপস্থিত মেমরি" এর একটি বড় অংশের জন্য স্ল্যাব ক্যাশে প্রশংসনীয় হয়, /proc/slabinfoএটি কোথায় গেছে তা পরীক্ষা করে দেখুন। যদি এটি ডেন্টরি বা আইওনড হয় তবে আপনি sync ; echo 2 > /proc/sys/vm/drop_cachesসেগুলি থেকে মুক্তি পেতে ব্যবহার করতে পারেন ।

আপনি slabtopস্ল্যাব ক্যাশের বর্তমান ব্যবহারকে বন্ধুত্বপূর্ণ বিন্যাসে দেখানোর জন্যও সরঞ্জামটি ব্যবহার করতে পারেন । cবর্তমান ক্যাশে আকার অনুসারে তালিকাটি সাজানো হবে।

থেকে: https://stackoverflow.com/a/5467207

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