Vm.min_free_kbytes কি এবং কিভাবে এটি টিউন করবেন?

What Is Vm Min_free_kbytes



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

Vm.min_free_kbytes কিভাবে কাজ করে

সিস্টেমের যথাযথ কার্যকারিতা নিশ্চিত করার জন্য সিস্টেমের দ্বারা মেমরি বরাদ্দ প্রয়োজন হতে পারে। যদি কার্নেল সমস্ত মেমরি বরাদ্দ করার অনুমতি দেয় তবে ওএসকে মসৃণভাবে চালানোর জন্য নিয়মিত অপারেশনের জন্য মেমরির প্রয়োজন হলে এটি সংগ্রাম করতে পারে। এজন্য কার্নেল টিউনেবল vm.min_free_kbytes প্রদান করে। টিউনেবল কার্নেলের মেমরি ম্যানেজারকে কমপক্ষে X পরিমাণ মুক্ত মেমরি রাখতে বাধ্য করবে। এখানে থেকে সরকারী সংজ্ঞা লিনাক্স কার্নেল ডকুমেন্টেশন : এটি লিনাক্স ভিএমকে সর্বনিম্ন কিলোবাইট মুক্ত রাখতে বাধ্য করতে ব্যবহৃত হয়। VM এই নম্বরটি ব্যবহার করে সিস্টেমের প্রতিটি লোমেম জোনের জন্য একটি ওয়াটারমার্ক [WMARK_MIN] মান গণনা করে। প্রতিটি লোমেম জোন তার আকারের উপর আনুপাতিক ভিত্তিতে বেশ কয়েকটি সংরক্ষিত মুক্ত পৃষ্ঠা পায়। PF_MEMALLOC বরাদ্দ সন্তুষ্ট করার জন্য কিছু ন্যূনতম পরিমাণ মেমরি প্রয়োজন; যদি আপনি এটি 1024KB এর চেয়ে কম সেট করেন, আপনার সিস্টেমটি সূক্ষ্মভাবে ভেঙে যাবে এবং উচ্চ লোডের নিচে অচলাবস্থার ঝুঁকিতে পড়বে। এটি খুব বেশি সেট করা আপনার মেশিনকে তাত্ক্ষণিকভাবে OOM করবে।







Vm.min_free_kbytes কাজ যাচাই করা হচ্ছে

Min_free_kbytes- এর সেটিং ডিজাইন অনুযায়ী কাজ করছে তা পরীক্ষা করার জন্য, আমি একটি লিনাক্স ভার্চুয়াল উদাহরণ তৈরি করেছি মাত্র 75.75 গিগাবাইট র‍্যাম দিয়ে। সিস্টেম বিশ্লেষণ করতে নিচের ফ্রি কমান্ডটি ব্যবহার করুন:



#বিনামূল্যে -মি



এমবিতে মুদ্রিত মানগুলি পেতে -m পতাকা ব্যবহার করে উপরের বিনামূল্যে মেমরি ইউটিলিটিটি দেখুন। মোট মেমরি 3.5 থেকে 3.75 গিগাবাইট মেমরি। 121 MB মেমরি ব্যবহার করা হয়, 3.3 GB মেমরি বিনামূল্যে, 251 MB বাফার ক্যাশে ব্যবহার করা হয়। এবং 3.3 গিগাবাইট মেমরি পাওয়া যায়।





এখন আমরা vm.min_free_kbytes এর মান পরিবর্তন করতে যাচ্ছি এবং সিস্টেম মেমরিতে কি প্রভাব পড়ছে তা দেখুন। আমরা নীচের অনুযায়ী কার্নেল প্যারামিটার মান পরিবর্তন করতে proc ভার্চুয়াল ফাইল সিস্টেমের নতুন মান প্রতিধ্বনিত করব:

# প্রতিধ্বনি 1500000>/proc/sys/vm/min_free_kbytes
# sysctl vm.min_free_kbytes



আপনি দেখতে পারেন যে প্যারামিটারটি প্রায় 1.5 গিগাবাইট পরিবর্তন করা হয়েছে এবং কার্যকর হয়েছে। এখন আসুন ব্যবহার করি বিনামূল্যে সিস্টেম দ্বারা স্বীকৃত কোন পরিবর্তন দেখতে আবার কমান্ড করুন।

#বিনামূল্যে -মি

বিনামূল্যে মেমরি এবং বাফার ক্যাশে কমান্ড দ্বারা অপরিবর্তিত, কিন্তু হিসাবে প্রদর্শিত মেমরি পরিমাণ উপলব্ধ 3327 থেকে 1222 MB এ কমিয়ে আনা হয়েছে। যা প্যারামিটারের পরিবর্তনের আনুমানিক হ্রাস 1.5 গিগাবাইট মিনিট ফ্রি মেমোরিতে।

এখন একটি 2GB ডেটা ফাইল তৈরি করা যাক এবং তারপর দেখুন যে ফাইলটি বাফার ক্যাশে পড়লে মানগুলি কী করে। নীচে ব্যাশ স্ক্রিপ্টের 2 লাইনে 2 জিবি ডেটা ফাইল কীভাবে তৈরি করবেন তা এখানে। স্ক্রিপ্টটি ডিডি কমান্ড ব্যবহার করে একটি 35 এমবি র্যান্ডম ফাইল তৈরি করবে এবং তারপর এটি 70 বার একটি নতুন কপি করবে তথ্য ফাইল আউটপুট:

# dd if =/dev/random of =/root/d1.txt count = 1000000
# সেক 1 70` -এর জন্য; প্রতিধ্বনি করি $ i; cat /root/d1.txt >> /root /data_file; সম্পন্ন

আসুন ফাইলটি পড়ি এবং নীচের অনুসারে /dev /null এ ফাইলটি পড়ে এবং পুন redনির্দেশিত করে বিষয়বস্তু উপেক্ষা করি:

#বিড়ালতথ্য ফাইল> /দেব/খালি

ঠিক আছে, এই ম্যানুভার্সের সেট দিয়ে আমাদের সিস্টেম মেমোরিতে কী ঘটেছে, এখন এটি পরীক্ষা করে দেখুন:

#বিনামূল্যে -মি

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

# সময় বিড়াল data_file> /dev /null
# সময় বিড়াল data_file> /dev /null

পড়া ফাইলটি প্রায় 20 সেকেন্ড সময় নিয়েছিল যা বোঝায় যে এটি প্রায় সব ক্যাশে নয়।

একটি চূড়ান্ত বৈধতা হিসাবে আসুন vm.min_free_kbytes কমানো যাক যাতে পৃষ্ঠা ক্যাশে কাজ করার জন্য আরও জায়গা থাকে এবং আমরা আশা করতে পারি যে ক্যাশে কাজ করছে এবং ফাইলটি আরও দ্রুত পড়ছে।

# প্রতিধ্বনি 67584>/proc/sys/vm/min_free_kbytes
# সময় বিড়াল data_file> /dev /null
# সময় বিড়াল data_file> /dev /null

ফাইলটি ক্যাশ করার জন্য অতিরিক্ত মেমোরি পাওয়া যায়।

আমি আরেকটি পরীক্ষা করতে আগ্রহী। এই সত্যিই উচ্চ vm.min_free_kbytes সেটিং এর মুখে একটি C প্রোগ্রাম থেকে মেমরি বরাদ্দ করার জন্য malloc কলগুলির সাথে কি ঘটে। এটা malloc ব্যর্থ হবে? সিস্টেম কি মারা যাবে? প্রথমে vm.min_free_kbytes সেটিংটি সত্যিই উচ্চ মানের রিসেট করুন আমাদের পরীক্ষাগুলি পুনরায় শুরু করতে:

#বের করে দিল 1500000 > /শতাংশ/sys/ভিএম/min_free_kbytes

আসুন আমাদের মুক্ত স্মৃতির দিকে আবার তাকাই:

তাত্ত্বিকভাবে আমাদের 1.9 জিবি ফ্রি এবং 515 এমবি পাওয়া যায়। আসুন স্ট্রেস-এনজি নামে একটি স্ট্রেস টেস্ট প্রোগ্রাম ব্যবহার করি যাতে কিছু মেমরি ব্যবহার করা যায় এবং আমরা কোথায় ব্যর্থ হই। আমরা vm পরীক্ষক ব্যবহার করব এবং 1 GB মেমরি বরাদ্দ করার চেষ্টা করব। যেহেতু আমরা একটি 3.75 জিবি সিস্টেমে শুধুমাত্র 1.5 গিগাবাইট সংরক্ষিত করেছি, আমার ধারণা এটি কাজ করা উচিত।

# স্ট্রেস-এনজি-ভিএম 1-ভিএম-বাইটস 1 জি-টাইমআউট 60
চাপ: তথ্য:[17537]প্রেরণ হোগস:ভিএম
চাপ: তথ্য:[17537]ক্যাশে বরাদ্দ: ডিফল্ট ক্যাশের আকার: 46080K
চাপ: তথ্য:[17537]সফল রান সম্পন্নভিতরে60.09 সে(মিনিট,0.09শুকনো)
# স্ট্রেস-এনজি-ভিএম 2-ভিএম-বাইট 1 জি-টাইমআউট 60
# স্ট্রেস-এনজি-ভিএম 3-ভিএম-বাইট 1 জি-টাইমআউট 60

আসুন আরও শ্রমিকের সাথে এটি আবার চেষ্টা করি, আমরা 1, 2, 3, 4 শ্রমিক চেষ্টা করতে পারি এবং কিছু সময়ে এটি ব্যর্থ হওয়া উচিত। আমার পরীক্ষায় এটি 1 এবং 2 শ্রমিকের সাথে পাস করেছে কিন্তু 3 জন শ্রমিকের সাথে ব্যর্থ হয়েছে।

আসুন vm.min_free_kbytes কে কম সংখ্যায় রিসেট করি এবং দেখি যে এটি আমাদের 3..75৫ জিবি সিস্টেমে ১ জিবি দিয়ে memory টি মেমরি স্ট্রেসার চালাতে সাহায্য করে কিনা।

# প্রতিধ্বনি 67584>/proc/sys/vm/min_free_kbytes
# স্ট্রেস-এনজি-ভিএম 3-ভিএম-বাইট 1 জি-টাইমআউট 60

এবার এটি ত্রুটি ছাড়াই সফলভাবে চলল, আমি সমস্যা ছাড়াই এটি দুইবার চেষ্টা করেছি। তাই আমি উপসংহারে আসতে পারি যে malloc- এর জন্য আরও মেমরি উপলব্ধ থাকার একটি আচরণগত পার্থক্য আছে, যখন vm.min_free_kbytes মানটি কম মান নির্ধারণ করা হয়।

Vm.min_free_kbytes এর জন্য ডিফল্ট সেটিং

আমার সিস্টেমে সেটিং এর জন্য ডিফল্ট মান হল 67584 যা সিস্টেমে প্রায় 1.8% RAM বা 64 MB। প্রচণ্ডভাবে থ্র্যাশড সিস্টেমে নিরাপত্তার কারণে আমি এটিকে আরও কিছুটা সংরক্ষিত মুক্ত মেমরির জন্য 128 এমবি পর্যন্ত বাড়িয়ে তুলতে চাই, তবে গড় ব্যবহারের জন্য ডিফল্ট মান যথেষ্ট বুদ্ধিমান বলে মনে হয়। অফিসিয়াল ডকুমেন্টেশন মান খুব বেশি করার বিষয়ে সতর্ক করে। এটি সিস্টেমের 5 বা 10% র RAM্যামে সেট করা সম্ভবত সেটিংটির উদ্দেশ্যে ব্যবহার নয় এবং এটি খুব বেশি।

রিবুট থেকে বাঁচতে vm.min_free_kbytes সেট করা

সেটিংস রিবুট থেকে বাঁচতে পারে এবং ডিফল্ট মানগুলিতে পুনরুদ্ধার করা হয় না তা নিশ্চিত করার জন্য /etc/sysctl.conf ফাইলে পছন্দসই নতুন মান রেখে sysctl সেটিংটি স্থায়ী করতে ভুলবেন না।

উপসংহার

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