- লিনাক্স ক্যাশে এবং বাফার হিসেবে ফিজিক্যাল মেমরি ব্যবহার করে, তাই র্যামে কম "ফ্রি" অংশ থাকা মানেই এই নয় যে কোনো সমস্যা আছে।
- র্যাম, সোয়াপ, ভার্চুয়াল মেমরি এবং পেজ ক্যাশের সমন্বয় প্রসেসগুলোকে বিচ্ছিন্ন রাখতে সাহায্য করে এবং বিভিন্ন লোডের অধীনেও পারফরম্যান্স বজায় রাখে।
- free, htop, vmstat, pmap, এবং cgroupv2-এর মতো টুলগুলো প্রসেস ও সার্ভিসগুলোর মেমরি ব্যবহার নির্ণয় এবং সীমিত করা সহজ করে তোলে।
- zram, zswap, EarlyOOM বা systemd-oomd-এর মতো কৌশলগুলো মেমোরির চাপের মুখে সিস্টেমের প্রতিক্রিয়া উন্নত করে এবং ক্র্যাশ প্রতিরোধ করে।
লিনাক্স-ভিত্তিক সার্ভার বা ডেস্কটপে কাজ করার সময়, মেমরি ম্যানেজমেন্ট হলো অন্যতম প্রধান একটি বিষয় যা একটি দ্রুত সিস্টেমকে একটি ধীরগতির সিস্টেম থেকে আলাদা করে। সেটি ডেবিয়ান, উবুন্টু, আলমালিনাক্স, সেন্টওএস বা অন্য যেকোনো ডিস্ট্রিবিউশনই হোক না কেন, ক্র্যাশ, পারফরম্যান্সের অবনতি এবং স্থিতিশীলতার সমস্যা প্রতিরোধ করার জন্য লিনাক্স কীভাবে র্যাম, সোয়াপ এবং অন্যান্য অভ্যন্তরীণ প্রক্রিয়াগুলো পরিচালনা করে তা বোঝা অত্যন্ত জরুরি।
তাছাড়া, চাহিদাপূর্ণ ডেটাবেস, কন্টেইনার, পূর্ণাঙ্গ ডেস্কটপ এবং ভারী অ্যাপ্লিকেশন চালিত আধুনিক পরিবেশে, শুধু 'অনেক র্যাম থাকাই' যথেষ্ট নয়: জানাটা অপরিহার্য। লিনাক্স কীভাবে মেমরি ব্যবহার করে, সূচকগুলোর আসল অর্থ কী আমরা কি দেখতে পাই মত সরঞ্জাম top, htop, free o vmstatএবং কার্নেল, সোয়াপ, সিগ্রুপস, বা জিরাম, জিসোয়াপ, আর্লিওওএম, বা সিস্টেমডি-ওওএমডি-এর মতো মেকানিজমগুলোর আচরণ সূক্ষ্মভাবে নিয়ন্ত্রণ করার জন্য আমাদের কাছে কী কী বিকল্প আছে?
লিনাক্সে মেমরির মৌলিক বিষয়
লিনাক্স উপলব্ধ মেমরির সর্বোত্তম ব্যবহার করার জন্য ডিজাইন করা হয়েছে, তাই র্যাম প্রায় কখনোই "খালি" দেখায় না, কারণ কার্নেল ডেটা এবং অ্যাপ্লিকেশনগুলিতে দ্রুত অ্যাক্সেসের জন্য এটিকে ডিস্ক ক্যাশে, বাফার এবং অস্থায়ী স্টোরেজ হিসাবে ব্যবহার করে । এর ফলে অনেক ভুল ধারণা তৈরি হয়: কম "ফ্রি" মেমরি দেখা কোনো সমস্যার লক্ষণ নয়, বরং এটি বোঝায় যে সিস্টেমটি দক্ষতার সাথে কাজ করছে।
একটি কম্পিউটার মোট কী পরিমাণ মেমরি পরিচালনা করতে পারে, তা অপারেটিং সিস্টেমের আর্কিটেকচারের উপর নির্ভর করে । একটি ৩২-বিট সিস্টেম সাধারণত প্রায় ৪ গিগাবাইট অ্যাড্রেসেবল মেমরিতে সীমাবদ্ধ থাকে, যেখানে একটি ৬৪-বিট সিস্টেম সহজেই কয়েক দশ বা শত গিগাবাইট পরিচালনা করতে পারে। তাত্ত্বিকভাবে, ৬৪-বিট আর্কিটেকচার বিপুল পরিমাণ (এক্সাবাইটের মতো) মেমরি ব্যবহারের সুযোগ দেয়, যদিও বাস্তবে এর প্রকৃত সীমা ব্যবহৃত হার্ডওয়্যার এবং কার্নেল দ্বারা নির্ধারিত হয়।
লিনাক্স একত্রিত করে বিভাজন এবং পৃষ্ঠাঙ্কন মেমরিকে সংগঠিত করার জন্য। মেমরিকে নির্দিষ্ট আকারের পেজে (সাধারণত ৪ কিলোবাইট) ভাগ করা হয়, যা দিয়ে কোয়েরি করা যায়। getconf PAGESIZEএবং কার্নেল পেজ টেবিল নামক অভ্যন্তরীণ কাঠামো পরিচালনা করে, যা ভার্চুয়াল অ্যাড্রেসকে ফিজিক্যাল অ্যাড্রেসে রূপান্তর করে, অনুমতি প্রয়োগ করে এবং প্রতিটি পেজের অবস্থা নিয়ন্ত্রণ করে।
ফিজিক্যাল মেমরি, অর্থাৎ কম্পিউটারে ইনস্টল করা র্যাম , একটি ব্যয়বহুল কিন্তু অত্যন্ত দ্রুতগতির রিসোর্স। লিনাক্স এটি প্রসেস চালানো, ডেটা ক্যাশ, শেয়ার্ড মেমরি, আই/ও বাফার এবং অভ্যন্তরীণ কার্নেল স্ট্রাকচারের জন্য ব্যবহার করে। যখন প্রসেসগুলো পুরো র্যাম ব্যবহার করতে পারে না, তখন সিস্টেম ধীরগতির ফাইল এবং স্টোরেজ ডিভাইসগুলোতে দ্রুত অ্যাক্সেসের জন্য ডিস্ক ক্যাশিংয়ের মাধ্যমে সেই শূন্যস্থান পূরণ করে।
যেহেতু র্যাম সীমিত, লিনাক্স উপলব্ধ স্থানকে যৌক্তিকভাবে প্রসারিত করতে ভার্চুয়াল মেমরি এবং সোয়াপ প্রক্রিয়া ব্যবহার করে , যা প্রসেসগুলোকে একটি বৃহৎ এবং অবিচ্ছিন্ন অ্যাড্রেস স্পেস দেখতে দেয়, যদিও পেজগুলো র্যাম এবং এর নিচের সেকেন্ডারি স্টোরেজের মধ্যে পুনঃব্যবহৃত ও স্থানান্তরিত হতে থাকে।
ভার্চুয়াল মেমরি, ফিজিক্যাল মেমরি, সোয়াপ এবং ডিস্ক
লিনাক্সে, "ভার্চুয়াল মেমরি" শব্দটি প্রায়শই প্রতিটি প্রসেসের কাছে দৃশ্যমান মেমরি স্পেসকে বোঝাতে ব্যবহৃত হয়। প্রসেসরের MMU এবং কার্নেলের পেজ টেবিলের সমন্বয়ের ফলে প্রতিটি প্রোগ্রাম তার নিজস্ব বিচ্ছিন্ন এবং সুরক্ষিত অ্যাড্রেস স্পেস দেখতে পায় । এই স্পেসটি উপলব্ধ র্যামের চেয়ে অনেক বড় এবং এটি ফিজিক্যাল মেমরি, সোয়াপ ও ম্যাপড ফাইল উভয়ের উপর নির্ভর করে।
ফিজিক্যাল মেমোরি (র্যাম) হলো সেই জায়গা যেখানে সক্রিয়ভাবে ব্যবহৃত পেজগুলো অবস্থান করে। সাধারণ কাজের চাপের জন্য পর্যাপ্ত র্যাম থাকা অত্যন্ত গুরুত্বপূর্ণ । উদাহরণস্বরূপ, MongoDB-এর মতো ডেটাবেসযুক্ত একটি সার্ভারের জন্য ডেটাবেস ইঞ্জিন এবং অন্যান্য পরিষেবার প্রয়োজনের চেয়ে বেশি ফিজিক্যাল মেমোরি প্রয়োজন হয়, কারণ যদি MongoDB ব্যাপকভাবে সোয়াপ ব্যবহার করতে বাধ্য হয়, তবে পারফরম্যান্স মারাত্মকভাবে হ্রাস পাবে: র্যাম অ্যাক্সেস ন্যানোসেকেন্ডে পরিমাপ করা হয়, যেখানে ডিস্ক সোয়াপ মিলিসেকেন্ডে কাজ করে।
সোয়াপ মেমরি র্যামের একটি ধীরগতির বর্ধিত অংশ হিসেবে কাজ করে । যখন ফিজিক্যাল মেমরি পূর্ণ হয়ে যায়, লিনাক্স কম ব্যবহৃত পেজগুলোকে সোয়াপ স্পেসে স্থানান্তর করতে পারে, যা একটি ডেডিকেটেড পার্টিশন বা ফাইলসিস্টেমের ভেতরের কোনো ফাইল হতে পারে। উভয় পদ্ধতিই বৈধ; কোনটি বেছে নেওয়া হবে তা প্রশাসনিক নীতি, ব্যবস্থাপনার সুবিধা এবং হাইবারনেশনের প্রয়োজনীয়তার উপর নির্ভর করে।
সোয়াপ স্পেস সম্পর্কে ভুল ধারণা দূর করা জরুরি: এটি কোনো খলনায়ক নয়। এটি নিজে থেকে একটি ধীরগতির সিস্টেমের সমার্থক নয়, কিংবা এটি এমন কোনো রিসোর্সও নয় যা কেবল সবকিছু ক্র্যাশ করার সময়ই ব্যবহার করা উচিত। সঠিকভাবে কনফিগার করা হলে, সোয়াপ স্পেস আপনাকে নিষ্ক্রিয় অ্যানোনিমাস পেজ (যেমন, প্রসেস মেমরির যে অংশগুলো দীর্ঘ সময় ধরে ব্যবহৃত হয়নি) থেকে র্যাম খালি করতে সাহায্য করে , যার ফলে নতুন লোডগুলোর জন্য জায়গা তৈরি হয় যেগুলোর গতি প্রয়োজন।
র্যাম এবং সোয়াপ ছাড়াও স্টোরেজ ডিভাইসগুলোও গুরুত্বপূর্ণ ভূমিকা পালন করে। ডিস্ক মেমোরি এমন স্থায়ী ডেটা সংরক্ষণ করে যা রিবুট এবং বিদ্যুৎ বিভ্রাটের পরেও অক্ষত থাকে । কম্পিউটার চালু থাকা অবস্থায়, এই ডেটার বেশিরভাগই র্যামে ক্যাশ করা থাকে (পেজ ক্যাশ), এবং কার্নেল সাম্প্রতিক ব্যবহারের সাধারণ নিয়মের ওপর ভিত্তি করে সিদ্ধান্ত নেয় কোন পেজগুলো রাখা হবে এবং কোনগুলো বাদ দেওয়া হবে, যার লক্ষ্য হলো ব্যয়বহুল ডিস্ক অ্যাক্সেস কমানো।
লিনাক্সে মেমরি ব্যবহারের প্রবাহ
একটি লিনাক্স সিস্টেমে সাধারণ ডেটা প্রবাহে বেশ কয়েকটি উপাদান জড়িত থাকে: ব্যবহারকারী বা অ্যাপ্লিকেশনগুলো অনুরোধ তৈরি করে, যেগুলোকে সিস্টেম মেমরি এবং ডিস্ক অ্যাক্সেসে রূপান্তরিত করে । স্টোরেজ থেকে পড়া ডেটা প্রথমে র্যামে লোড করা হয়, যেখানে এটি পেজ ক্যাশে থাকতে পারে। যখন পুনরায় অনুরোধ করা হয়, কার্নেল পরীক্ষা করে দেখে যে এটি ইতিমধ্যেই ক্যাশে আছে কিনা, যার ফলে নতুন করে ডিস্ক অ্যাক্সেস এড়ানো যায়।
এই প্রক্রিয়ায় সিপিইউ এবং এমএমইউ-ও জড়িত থাকে। সিপিইউ ভার্চুয়াল অ্যাড্রেসের উপর কাজ করে এবং পেজ টেবিল ব্যবহার করে হার্ডওয়্যার প্রতিটি অ্যাক্সেসকে র্যামের একটি ফিজিক্যাল অ্যাড্রেসে রূপান্তরিত করে, অথবা অ্যাড্রেসটি লোড করা না থাকলে পেজ ফল্ট মেকানিজমের মাধ্যমে তার সমাধান করে। ডেটা স্থায়ীভাবে সংরক্ষণ করার প্রয়োজন হলে, তা ডিস্কে লেখা হয়, কিন্তু এটি নিয়ে কাজ করার সময় পারফরম্যান্স উন্নত করার জন্য এটিকে দ্রুত মেমরিতে রাখার উপর অগ্রাধিকার দেওয়া হয় ।
যখন র্যাম কমতে শুরু করে, তখন কার্নেল তার মেমরি রিক্লেমেশন অ্যালগরিদম নিয়ে সক্রিয় হয়: এটি কম ব্যবহৃত পেজ ক্যাশে খালি করে, মেমরি এলাকাগুলোকে সংকুচিত করে, কম অগ্রাধিকারের পেজগুলোর জন্য সোয়াপ ব্যবহার করে এবং পরিস্থিতি গুরুতর হলে OOM-কিলার সক্রিয় করার মতো আরও কঠোর ব্যবস্থা নিতে পারে।
লিনাক্সে একটি প্রসেসের মেমরি ম্যাপ
লিনাক্সে চলমান প্রতিটি প্রসেসের একটি মেমরি ম্যাপ বা মেমরি লেআউট থাকে , যা নির্ধারণ করে এর অ্যাড্রেস স্পেস কীভাবে সংগঠিত হবে: অর্থাৎ এক্সিকিউটেবল কোড, গ্লোবাল ভেরিয়েবল, হিপ, স্ট্যাক, কমান্ড-লাইন আর্গুমেন্ট, এনভায়রনমেন্ট ভেরিয়েবল এবং শেয়ার্ড ফাইল বা লাইব্রেরি ম্যাপিংগুলো কোথায় অবস্থিত।
এই ম্যাপটি সাধারণত কয়েকটি স্বতন্ত্র অংশে বিভক্ত থাকে। ভার্চুয়াল স্পেসের একেবারে নিচে থাকে টেক্সট সেগমেন্ট (প্রোগ্রামের বাইনারি কোড), তার নিচে থাকে ইনিশিয়ালাইজড ও আনইনিশিয়ালাইজড ডেটা সেগমেন্ট (BSS), তারপর হিপ যেখানে ডাইনামিক অ্যালোকেশনগুলো সংরক্ষিত থাকে, এবং সবশেষে একেবারে উপরে থাকে প্রসেস স্ট্যাক। আর্গুমেন্ট এবং এনভায়রনমেন্টও অ্যাড্রেস স্পেসের উপরের অংশে অবস্থিত।
টেক্সট সেগমেন্টে প্রোগ্রামটির নির্বাহযোগ্য নির্দেশাবলী এবং শেয়ার্ড লাইব্রেরির নির্দেশাবলী থাকে । এটি সাধারণত শুধুমাত্র পঠনযোগ্য (read-only) এবং একই বাইনারি নির্বাহকারী একাধিক প্রসেস দ্বারা শেয়ার করা যেতে পারে, যার ফলে ফিজিক্যাল মেমরি সাশ্রয় হয়। এই অঞ্চলে লেখার যেকোনো প্রচেষ্টার ফলে একটি সেগমেন্টেশন ফল্ট (segmentation fault) ঘটে।
ইনিশিয়ালাইজড ডেটা সেগমেন্ট সেইসব গ্লোবাল এবং স্ট্যাটিক ভেরিয়েবল সংরক্ষণ করে, যেগুলোর শুরুতে একটি অশূন্য মান থাকে। ডেটা টাইপের উপর নির্ভর করে এই সেগমেন্টটিকে ধারণাগতভাবে একটি রিড-অনলি অংশ এবং একটি রিড-রাইট অংশে ভাগ করা যেতে পারে। অন্যদিকে, বিএসএস (BSS) সেগমেন্ট সেইসব গ্লোবাল বা স্ট্যাটিক ভেরিয়েবলকে একত্রিত করে, যেগুলোর কোডে কোনো সুস্পষ্ট মান থাকে না অথবা যেগুলোকে শূন্য দিয়ে ইনিশিয়ালাইজ করা হয়।
হিপ হলো ডাইনামিক মেমরি ম্যানেজমেন্টের জন্য ব্যবহৃত অঞ্চল , যা malloc, calloc, বা realloc-এর মতো কমান্ড দ্বারা পরিচালিত হয় । যখন কোনো প্রোগ্রাম মেমরির জন্য অনুরোধ করে, তখন ইউজার মেমরি ম্যানেজার হিপ থেকে তা গ্রহণ করে; যখন এটি free কমান্ডের মাধ্যমে মেমরি মুক্ত করে, তখন তা হিপে ফেরত আসে, কিন্তু অপারেটিং সিস্টেমে ফেরত আসে না, যা ইন্টারনাল ফ্র্যাগমেন্টেশনের কারণ হতে পারে। স্ট্যাক লোকাল ফাংশন ভেরিয়েবল, রিটার্ন অ্যাড্রেস এবং প্যারামিটারের জন্য সংরক্ষিত থাকে এবং প্রতিটি ফাংশন কল ও রিটার্নের সাথে এটি বৃদ্ধি বা হ্রাস পায়।
যদি আমরা কোনো চলমান প্রসেসের মেমরি ম্যাপ পরীক্ষা করতে চাই, তাহলে টুল ব্যবহার করতে হয় যেমন pmap এগুলো খুব দরকারি। সাথে pmap <PID> আমরা বিভিন্ন ম্যাপ করা অঞ্চল, সেগুলোর আকার, অনুমতি, সেগুলো বেনামী নাকি ফাইলের সাথে যুক্ত, সেইসাথে র্যামে সেগুলোর আবাসিক আকার (RSS) এবং অন্যান্য মেট্রিক দেখতে পারি, যা একটি অ্যাপ্লিকেশনের প্রকৃত মেমরি ব্যবহার বুঝতে সাহায্য করে।
মূল ধারণা: পেজ, পেজ ফল্ট এবং ক্যাশে
লিনাক্সে মেমরি ব্যবস্থাপনার ক্ষুদ্রতম একক হলো মেমরি পেজ , যা সাধারণত ৪ কিলোবাইট (KiB) হয়ে থাকে, যদিও নির্দিষ্ট কিছু কাজের জন্য এর চেয়ে বড় পেজও (হিউজ পেজ) পাওয়া যায়। কী সরানো হবে, কী মুক্ত করা হবে বা কী ক্যাশ করা হবে, সে সম্পর্কিত কার্নেলের সমস্ত সিদ্ধান্ত পেজ পর্যায়ে নেওয়া হয়, কোনো স্বতন্ত্র বাইট পর্যায়ে নয়।
পেজ টেবিল হলো কার্নেল দ্বারা পরিচালিত একটি শ্রেণিবদ্ধ কাঠামো যা নির্দেশ করে কীভাবে ভার্চুয়াল অ্যাড্রেসকে ফিজিক্যাল অ্যাড্রেসে রূপান্তরিত করা হয়। প্রতিটি এন্ট্রিতে রিড, রাইট এবং এক্সিকিউট পারমিশন , পেজের স্ট্যাটাস (মেমরিতে উপস্থিত, সোয়াপে আছে, ডার্টি, শেয়ার্ড ইত্যাদি) এবং অন্যান্য মেটাডেটা সম্পর্কিত তথ্য অন্তর্ভুক্ত থাকতে পারে, যা MMU রূপান্তরের সময় ব্যবহার করে।
যখন কোনো প্রসেস একটি বৈধ ভার্চুয়াল অ্যাড্রেস অ্যাক্সেস করে, কিন্তু সংশ্লিষ্ট পেজটি ব্যবহারের জন্য প্রস্তুত থাকে না, তখন একটি পেজ ফল্ট ঘটে। পেজটি হয়তো তখনও অ্যালোকেট করা হয়নি, এটি ডিস্কে থাকতে পারে, অথবা এটির প্রাথমিক ম্যাপিংয়ের প্রয়োজন হতে পারে। কার্নেল সেই পেজটি খুঁজে বের করতে বা তৈরি করতে হস্তক্ষেপ করে । যদি পেজটি র্যামে থাকে কিন্তু সঠিকভাবে চিহ্নিত করা না থাকে, তবে ফল্টের খরচ কম হয়; যদি এটিকে ডিস্ক (সোয়াপ বা ফাইল) থেকে আনতে হয়, তবে খরচ অনেক বেশি হয়।
পেজ ক্যাশ হলো লিনাক্সের ভালো পারফরম্যান্সের অন্যতম প্রধান রহস্য। কার্নেল ফাইল ডেটা এবং মেটাডেটা র্যামে সংরক্ষণ করে রিড ও রাইটের গতি বাড়ায়, যা ডিস্ক অ্যাক্সেসের সংখ্যা ব্যাপকভাবে কমিয়ে দেয়। তাই, যদিও মনে হতে পারে যে খুব কম ফ্রি মেমোরি আছে, আসলে সেই র্যামের অনেকটাই ব্যবহারযোগ্য থাকে: অ্যাপ্লিকেশনগুলোর আরও জায়গার প্রয়োজন হলে কার্নেল দ্রুত ক্যাশ স্পেস খালি করে দিতে পারে।
ভার্চুয়াল স্পেসের মধ্যে আমরা ফাইল মেমরি এবং ম্যাপ করা ফাইলের (যেমন, বাইনারি ও লাইব্রেরির কোড অথবা সুস্পষ্টভাবে ম্যাপ করা ফাইল) মধ্যে পার্থক্য করি। mmap), এবং অ্যানোনিমাস মেমরি, যা হিপ, স্ট্যাক এবং ফাইল ব্যাকআপবিহীন অন্যান্য ম্যাপিংয়ের সাথে সঙ্গতিপূর্ণ। শেষেরটি শুধুমাত্র প্রয়োজনে সোয়াপ আউট করা যেতে পারে, কারণ এমন কোনো ফাইল নেই যেখান থেকে এটি পুনরায় তৈরি করা যেতে পারে।.
মেমোরির উপর চাপ, ছটফটানি এবং OOM
যখন খালি পেজের সংখ্যা একটি নির্দিষ্ট সীমার নিচে নেমে আসে, তখন সিস্টেমটি মেমরি প্রেসার অবস্থায় প্রবেশ করেছে বলে ধরা হয় । এই পরিস্থিতিতে, কার্নেলকে এমন পেজ খুঁজে বের করতে বেশি সময় ব্যয় করতে হয় যেগুলোকে মুক্ত করা, কম্প্যাক্ট করা বা সোয়াপে সরানো যায়, এবং এটি সামগ্রিক পারফরম্যান্সকে প্রভাবিত করে।
ওয়েব সার্ভারে, মেমরির উপর অতিরিক্ত চাপ লেটেন্সি বাড়িয়ে দিতে পারে : ওয়ার্কারদের অনুরোধ প্রক্রিয়াকরণ চালিয়ে যাওয়ার আগে পেজ খালি হওয়ার জন্য অপেক্ষা করতে হয়, এবং সিপিইউ পেলোড প্রক্রিয়াকরণের পরিবর্তে মেমরি ব্যবস্থাপনার কাজে তার সাইকেল ব্যয় করে। ডেস্কটপে, এর ফলে স্টাটারিং, মাউসের ধীর প্রতিক্রিয়া, উইন্ডো কাজ না করা এবং এমনকি কিছুক্ষণের জন্য ফ্রিজও হতে পারে।
SSH, RDP, বা VNC-এর মাধ্যমে রিমোট অ্যাক্সেসের ক্ষেত্রে, এই পরিস্থিতির ফলে কমান্ডগুলো বারবার আটকে যায়, টাইপ করতে দেরি হয় এবং সাধারণভাবে ইন্টারঅ্যাকশন আরও ধীরগতির হয়ে পড়ে। যদি সোয়াপও ব্যাপকভাবে ব্যবহৃত হয়, তবে এটি একটি থ্র্যাশিং অবস্থার সৃষ্টি করতে পারে , যেখানে সিস্টেম দরকারি কোড এক্সিকিউট করার চেয়ে র্যাম এবং স্টোরেজের মধ্যে পেজ স্থানান্তরে বেশি সময় ব্যয় করে।
যখন প্রসেসগুলোর সক্রিয় ওয়ার্কিং সেট বজায় রাখার জন্য র্যাম অপর্যাপ্ত হয়, তখন থ্র্যাশিং ঘটে। সোয়াপ সক্রিয় থাকলে, অ্যানোনিমাস পেজগুলো ক্রমাগত র্যাম এবং সোয়াপ স্পেসের মধ্যে যাতায়াত করে, যা ডিস্ক I/O চালু করে। সোয়াপ ছাড়া, কার্নেলের এই অ্যানোনিমাস পেজগুলো ফেলার কোনো জায়গা থাকে না, এবং এর একমাত্র সমাধান হলো OOM-কিলার ব্যবহার করে প্রসেসগুলো বন্ধ করে দেওয়া।
সোয়াপ ছাড়াও ফাইল মেমোরি থ্র্যাশিং ঘটতে পারে: ফাইল ক্যাশের অন্তর্গত পেজগুলো ডিস্ক থেকে বের করে দেওয়া হয় এবং অ্যাপ্লিকেশনগুলোর প্রয়োজন অনুযায়ী ক্রমাগত পুনরায় লোড করা হয়, যা ইনপুট/আউটপুট কার্যকলাপের একটি চক্র এবং চরম ধীরগতি তৈরি করে।
যখন কার্নেল মেমরি অর্জনের জন্য তার সমস্ত বিকল্প—যেমন ক্যাশে মুক্ত করা, পেজগুলোকে সোয়াপে সরানো, কম্প্যাক্ট করা এবং সি-গ্রুপস পলিসি প্রয়োগ করা—শেষ করে ফেলে, তখন এটি একটি আউট-অফ-মেমরি (OOM) অবস্থায় প্রবেশ করে । সেই মুহূর্তে, মেমরি পুনরুদ্ধার করতে এবং সিস্টেমের বাকি অংশকে বাঁচাতে OOM-কিলারকে অবশ্যই এক বা একাধিক প্রসেস বন্ধ করার জন্য নির্বাচন করতে হয়।
কোন প্রসেসটি বন্ধ করা হবে তা বেছে নিতে, কার্নেল একটি গণনা করে oom_score প্রতিটি পিআইডি-র জন্য, ব্যবহৃত মেমরির পরিমাণ, প্রসেসটির গুরুত্ব এবং অন্যান্য অভ্যন্তরীণ প্যারামিটারের মতো বিষয়গুলির উপর ভিত্তি করে। এই আচরণটি পরিবর্তন করা যেতে পারে oom_score_adjযা একটি নির্দিষ্ট প্রক্রিয়ার ওজন সমন্বয় করে। যেমন সরঞ্জাম choom এগুলোর মাধ্যমে আপনি এই মানগুলো সহজেই দেখতে ও পরিবর্তন করতে পারবেন।
বিনিময়: প্রচলিত ধারণা, সর্বোত্তম অনুশীলন এবং আধুনিক রূপভেদ
সোয়াপের একটি কিছুটা অযৌক্তিক বদনাম রয়েছে। অনেক ব্যবহারকারী মনে করেন যে এটি যেকোনো মূল্যে এড়িয়ে চলা উচিত অথবা র্যাম খুব সীমিত হলেই কেবল এর ব্যবহার যুক্তিযুক্ত। তবে, লিনাক্সে সোয়াপ হলো সামগ্রিক ভার্চুয়াল মেমরি কৌশলের একটি অংশ : এটি কার্নেলকে নিষ্ক্রিয় অ্যানোনিমাস পেজগুলোকে র্যাম থেকে সরিয়ে সক্রিয় ডেটা এবং পেজ ক্যাশকে অগ্রাধিকার দিতে সাহায্য করে।
সোয়াপকে এমন একটি 'শেষ উপায়' হিসেবে ভাবা ভুল, যা কেবল অন্য সব উপায় ব্যর্থ হলেই ব্যবহার করা হয়। প্রকৃতপক্ষে, প্রচুর র্যামযুক্ত সিস্টেমেও সোয়াপ থাকার কারণে কার্নেল তার প্রধান ওয়ার্কিং সেটকে সচল রাখতে এবং ফিজিক্যাল মেমোরির আরও ভালো ব্যবহার নিশ্চিত করতে অতিরিক্ত সুযোগ পায়। তবে এটা সত্যি যে, যখন সোয়াপের কার্যকলাপ খুব বেশি এবং দীর্ঘস্থায়ী হয়, তখন পারফরম্যান্স লক্ষণীয়ভাবে ক্ষতিগ্রস্ত হয়।
বাস্তবিক অর্থে, সোয়াপের আকার র্যামের ১ থেকে ২ গুণ হওয়া উচিত—এই পুরোনো নিয়মটি আর অপরিবর্তনীয় নয়। বেশি মেমোরিযুক্ত সার্ভারগুলোতে পারফরম্যান্স উন্নত করতে ও ডিস্ক রাইট কমাতে আনুপাতিকভাবে অনেক ছোট সোয়াপ বরাদ্দ করা, অথবা zram বা zswap-এর মতো প্রযুক্তি ব্যবহার করে র্যামে সংকুচিত সোয়াপ ব্যবহার করাই বেশি প্রচলিত।
সোয়াপের আরেকটি ব্যবহার হলো হাইবারনেশন: এর মাধ্যমে সিস্টেম র্যামের ডেটা সোয়াপ স্পেসে রেখে পুরোপুরি বন্ধ হয়ে যেতে পারে এবং চালু হওয়ার সময় তার আগের অবস্থা পুনরুদ্ধার করতে পারে। এর জন্য উপলব্ধ সোয়াপ স্পেসকে অবশ্যই সংরক্ষণযোগ্য মেমরির পরিমাণের সমান বা তার চেয়ে বড় হতে হয়, এবং এই বিষয়টিই zram (যা হাইবারনেশনের সুযোগ দেয় না) এবং প্রচলিত ডিস্ক সোয়াপের মতো সমাধানের মধ্যে একটিকে বেছে নেওয়ার ক্ষেত্রে প্রভাব ফেলে।
সাম্প্রতিক বছরগুলিতে, কিছু কার্নেলে OOM-কিলারের সন্দেহজনক আচরণের খবরও পাওয়া গেছে, যেখানে OOM-কিলার কার্যকর হওয়ার আগেই সিস্টেম ক্র্যাশ করে। কিছু ক্ষেত্রে, শর্টকাট সক্রিয় করা, যেমন Alt+SysRq+F (প্যারামিটারটি সক্রিয় করার পরে) /proc/sys/kernel/sysrqএর মাধ্যমে আপনি আপাতদৃষ্টিতে জমে যাওয়া একটি সিস্টেমকে পুনরুদ্ধার করতে OOM-কিলারকে বাধ্য করতে পারেন। এছাড়াও, কার্নেল চরম পরিস্থিতিতে পৌঁছানোর আগেই প্রতিক্রিয়া দেখানোর জন্য EarlyOOM, nohang, এবং systemd-oomd-এর মতো ডেমনগুলোর উদ্ভব হয়েছে।
স্মৃতি পর্যবেক্ষণ ও ব্যবস্থাপনার সরঞ্জাম
মেমোরি সমস্যা এড়াতে সঠিক টুল ব্যবহার করা অপরিহার্য। যেমন কমান্ডগুলো free, top, htop, vmstat, ps o sar অফার ক সিস্টেমটির অবস্থার একটি অত্যন্ত বিশদ এক্স-রেবাস্তব সময়ে এবং সময়ের সাথে সাথে উভয় ক্ষেত্রেই।
কমান্ড free এটি দ্রুত মোট মেমরি, ব্যবহৃত মেমরি, খালি মেমরি, ক্যাশ মেমরি ও বাফারের পরিমাণ এবং সেইসাথে সোয়াপ সম্পর্কিত তথ্য প্রদর্শন করে। প্রকৃতপক্ষে ফিজিক্যাল মেমরির অভাব আছে কিনা, নাকি এর বেশিরভাগই কেবল ক্যাশ করা আছে এবং কোনো সমস্যা ছাড়াই পুনরায় ব্যবহার করা যাবে, তা যাচাই করার জন্য এটি খুবই উপযোগী।
সর্বোত্তম top এবং এর উন্নত সংস্করণ htop এগুলোর মাধ্যমে আপনি প্রতিটি প্রসেসের সিপিইউ ও মেমরি ব্যবহার, সেইসাথে সিস্টেম লোড, আপটাইম, সোয়াপ ব্যবহার এবং অন্যান্য সূচক রিয়েল টাইমে দেখতে পারবেন। htop আরও ব্যবহারকারী-বান্ধব ইন্টারফেস প্রদান করে।রঙিন বার এবং কিবোর্ড শর্টকাটের সাহায্যে দ্রুত প্রসেসগুলো সাজানো, ফিল্টার করা বা বন্ধ করা যায়।
কমান্ড vmstat এটি আরও প্রযুক্তিগত দিক তুলে ধরে: মেমরি স্ট্যাটিস্টিকস, প্রসেস, পেজিং, ইন্টারাপ্ট এবং সিপিইউ শিডিউলিং। অতিরিক্ত পেজ ফল্ট, উচ্চ সোয়াপ অ্যাক্টিভিটি বা থ্র্যাশিং প্যাটার্ন শনাক্ত করার জন্য এটি আদর্শ। এদিকে, ps এটি আপনাকে প্রসেসগুলোকে অত্যন্ত বিস্তারিতভাবে তালিকাভুক্ত করার সুযোগ দেয়, যার মধ্যে রেসিডেন্ট মেমরি (RSS), ভার্চুয়াল মেমরি (VSZ) এবং অন্যান্য প্যারামিটারের জন্য কলাম অন্তর্ভুক্ত থাকে, যা "ট্রিগার" হওয়া অ্যাপ্লিকেশনগুলো সনাক্ত করতে সাহায্য করে।
ডেবিয়ান বা আলমালিনাক্স পরিবেশে, প্যাকেজগুলি যেমন sysstat তারা অতিরিক্ত কমান্ড প্রদান করে যেমন sar, যা যা করতে পারেন সময়ের সাথে সাথে মেমরি ব্যবহারের রেকর্ড রাখুনএর ফলে ব্যবহারের সর্বোচ্চ সময়কে নির্ধারিত কাজ, স্থাপন প্রক্রিয়া বা নির্দিষ্ট ঘটনার সাথে সম্পর্কযুক্ত করা এবং সেই অনুযায়ী সিস্টেম কনফিগারেশন সামঞ্জস্য করা সম্ভব হয়।
একটি নির্দিষ্ট প্রসেসের মেমরি ম্যাপ পরিদর্শন করতে, এর পাশাপাশি pmapছদ্ম-ফাইল সিস্টেমটি অন্বেষণ করা সর্বদা একটি ভালো ধারণা। /procযেখানে প্রতিটি প্রসেসের নিজস্ব ডিরেক্টরি থাকে, যেখানে তার মেমরি ম্যাপ সহ বিস্তারিত তথ্য থাকে। /proc/<PID>/maps এবং পরিসংখ্যানে /proc/<PID>/smaps.
মৌলিক অপ্টিমাইজেশন: সোয়াপ, ক্যাশে এবং সোয়াপিনেস
তত্ত্বের বাইরেও বেশ কিছু সহজ ব্যবহারিক পদক্ষেপ রয়েছে লিনাক্সে মেমরি ব্যবস্থাপনার সূক্ষ্ম সমন্বয় পাগল না হয়ে। প্রথম কাজগুলোর মধ্যে একটি হলো সোয়াপ স্ট্যাটাস চেক করা। swapon --show এবং, প্রয়োজনে, শুধুমাত্র পার্টিশনের উপর নির্ভর না করে একটি সোয়াপ ফাইল তৈরি করুন। এর ফলে ডিস্ক পুনরায় পার্টিশন না করেই ফাইলের আকার সমন্বয় করার সুবিধা পাওয়া যায়।
প্যারামিটার vm.swappiness এটি নিয়ন্ত্রণ করে যে কার্নেল ক্যাশে মুক্ত করার পরিবর্তে কতটা আগ্রাসীভাবে সোয়াপ ব্যবহার করবে। একটি উচ্চ মান সোয়াপকে আরও ঘন ঘন ব্যবহার করতে বাধ্য করে; একটি নিম্ন মান আরও চরম পরিস্থিতির জন্য সোয়াপ সংরক্ষিত রাখে এবং র্যামে ডেটা রাখার বিষয়টিকে অগ্রাধিকার দেয়। সেটিংস যেমন অদলবদল=১০ এগুলি অনেক ডেস্কটপ এবং হালকা সার্ভার পরিবেশে ভালোভাবে কাজ করে এবং সাময়িকভাবে প্রয়োগ করা যেতে পারে। sysctl দিয়ে কার্নেল অপ্টিমাইজেশন অথবা ক্রমাগত /etc/sysctl.conf.
খুবই নির্দিষ্ট কিছু পরিস্থিতিতে, যখন আমরা ম্যানুয়ালি ক্যাশে পরিষ্কার করতে চাই—উদাহরণস্বরূপ, একটি তীব্র রিড লোড শেষ হওয়ার পরে—তখন আমরা এই সেটিংটি ব্যবহার করতে পারি। vm.drop_caches। একত্রিত করা sync এবং সেই প্যারামিটারে একটি উপযুক্ত মান (১, ২, বা ৩) লেখার মাধ্যমে কার্নেল নির্দিষ্ট কিছু ক্যাশ বাতিল করে দেয়। তবে, এটি বিচক্ষণতার সাথে ব্যবহার করাই শ্রেয়, কারণ ক্যাশে "অপচয়িত মেমরি" নয়।কিন্তু একটি উল্লেখযোগ্য অপ্টিমাইজেশন।
ডেবিয়ান এবং আলমালিনাক্সের মতো ডিস্ট্রিবিউশনগুলিতে, এই সেটিংসগুলির সাথে রিসোর্স-ইনটেনসিভ প্রসেসগুলির ভালো মনিটরিং যুক্ত করা একটি সাধারণ বিষয়। htop o psযেসব পরিষেবা বা অ্যাপ্লিকেশন প্রচুর মেমরি ব্যবহার করে, সেগুলোকে শনাক্ত করা এবং প্রয়োজনে সেগুলোর পুনর্গঠন করা বা ব্যবহার সীমিত করা।
সোয়াপ এরিয়া তৈরি এবং সমন্বয় করা একটি তুলনামূলকভাবে সহজ কাজ: কেবল একটি ফাইল রিজার্ভ করুন fallocateএটিকে সঠিক অনুমতি দিন, এটিকে সোয়াপ হিসেবে শুরু করুন mkswap এবং এটি দিয়ে সক্রিয় করুন swaponপরিবর্তনটি স্থায়ী করার জন্য, একটি উপযুক্ত এন্ট্রি যোগ করা হয়। /etc/fstab যা নির্দেশ করে যে এই ফাইলটি প্রতিটি বুটে সোয়াপ হিসেবে ব্যবহৃত হবে।
উন্নত কৌশল: ইউজার স্পেসে zram, zswap, cgroupv2 এবং OOM
যখন আমরা অপ্টিমাইজেশনে আরও এক ধাপ এগিয়ে যেতে চাই, তখন zram, zswap, namespaces, এবং cgroups-এর মতো উন্নত কৌশলগুলো কাজে আসে । এর পাশাপাশি EarlyOOM, nohang, বা systemd-oomd-এর মতো ডেমনগুলোও রয়েছে, যেগুলো মেমরির সর্বোত্তম ব্যবহার এবং চাপের মুখে সিস্টেমের প্রতিক্রিয়া উন্নত করার জন্য ডিজাইন করা হয়েছে।
zram একটি কার্নেল মডিউল ব্যবহার করে সরাসরি র্যামের মধ্যেই কম্প্রেসড ব্লক ডিভাইস তৈরি করে। এই ডিভাইসগুলোতে একটি সোয়াপ স্পেস মাউন্ট করা যায়, ফলে পেজগুলো সংরক্ষণের আগেই কম্প্রেস হয়ে যায়। বাস্তবে, এটি কম্প্রেশনের জন্য কিছুটা সিপিইউ সময় ব্যয় করার বিনিময়ে উপলব্ধ মেমোরির আরও ভালো ব্যবহার নিশ্চিত করে এবং ডিস্কে লেখার প্রয়োজনীয়তা দূর করে, যদিও এর ফলে হাইবারনেট করার ক্ষমতাটি হারানো যায়।
অন্যদিকে, zswap ডিস্কের প্রকৃত সোয়াপ স্পেসের বিপরীতে একটি কম্প্রেসড ক্যাশে হিসেবে কাজ করে। যে পেজগুলো সোয়াপ করা হবে, সেগুলো প্রাথমিকভাবে র্যামে কম্প্রেসড অবস্থায় সংরক্ষিত থাকে এবং শুধুমাত্র যখন সেই ক্যাশে পূর্ণ হয়ে যায় বা পেজগুলো খালি করা হয়, তখনই সেগুলোকে প্রচলিত সোয়াপ স্পেসে লেখা হয়। এটি ডিস্ক I/O কমায়, SSD-এর আয়ু বাড়ায় এবং মাঝারি সোয়াপ ব্যবহারের ক্ষেত্রে পারফরম্যান্স উন্নত করে ।
রিসোর্স নিয়ন্ত্রণের ক্ষেত্রে, cgroupv2 প্রসেসগুলোকে শ্রেণিবিন্যাসে সাজানো এবং তাদের জন্য মেমরি, সিপিইউ ও অন্যান্য রিসোর্স বরাদ্দ করার একটি শক্তিশালী পদ্ধতি প্রদান করে। এটি বিভিন্ন প্যারামিটারের মাধ্যমে সম্পন্ন করা হয়, যেমন— memory.low অথবা ফাইল যেমন memory.pressureআপনি কার্নেলকে বলে দিতে পারেন কোন গ্রুপগুলোর অগ্রাধিকার রয়েছে এবং মেমোরির অভাবে টাস্কগুলো কতক্ষণ ব্লক হয়ে থাকে তা পর্যবেক্ষণ করতে পারেন, এবং সমস্যাটি কিছু টাস্ককে প্রভাবিত করছে নাকি পুরো গ্রুপটিকে, তা আলাদাভাবে চিহ্নিত করতে পারেন।
যেসব পরিস্থিতিতে সিস্টেম ফ্রিজ হওয়া যেকোনো মূল্যে এড়াতে হয়, সেখানে OOM পরিস্থিতি আরও সক্রিয়ভাবে পরিচালনা করার জন্য বেশ কিছু ইউজার-স্পেস ডেমন আবির্ভূত হয়েছে। EarlyOOM পর্যায়ক্রমে RAM এবং swap নিরীক্ষণ করে, এবং যখন এটি শনাক্ত করে যে উভয়ের পরিমাণ একটি নির্দিষ্ট সীমার নিচে নেমে গেছে (ডিফল্টরূপে, ১০% এরও কম বিনামূল্যে কাজ শুরু করার জন্য), বৃহত্তর প্রক্রিয়াগুলিতে সংকেত পাঠায় oom_score কার্নেল প্যানিক করার আগে মেমরি খালি করতে।
nohang একটি অনুরূপ কিন্তু আরও বেশি কনফিগারযোগ্য পদ্ধতি প্রদান করে, যা zram সমর্থন করে, মেমরি প্রেসার বিশ্লেষণ করে এবং ক্র্যাশের ঝুঁকি শনাক্ত হলে ব্যবহারকারীদের নিজস্ব ব্যবস্থা নির্ধারণের সুযোগ দেয়। যদিও অন্যান্য প্রকল্পের তুলনায় এই প্রকল্পের কার্যকলাপ কিছুটা কমে গেছে, তবুও এটি সেইসব উন্নত ব্যবহারকারীদের জন্য একটি আকর্ষণীয় বিকল্প, যারা কোন প্রসেসগুলো কখন বন্ধ করা হবে তার উপর সূক্ষ্ম নিয়ন্ত্রণ চান ।
অবশেষে, systemd-oomd, যা মূলত ফেসবুক দ্বারা তৈরি এবং এখন আধুনিক systemd সহ অনেক ডিস্ট্রিবিউশনে সমন্বিত, বৃহৎ পরিসরের ডেপ্লয়মেন্ট এবং ডেস্কটপ এনভায়রনমেন্ট উভয়ের জন্যই ডিজাইন করা একটি সমাধান প্রদান করে। এটি cgroup লিমিট, মেমরি প্রেসার এবং অন্যান্য সূচক পর্যবেক্ষণ করে এবং সিস্টেমের ব্যবহারযোগ্যতা পুনরুদ্ধার করার জন্য কোন ইউনিট বা সার্ভিস বন্ধ করতে হবে তা নির্ধারণ করে, যা ক্লাসিক কার্নেল OOM-কিলারের একটি আরও পরিশীলিত পরিপূরক হিসেবে কাজ করে।
স্মৃতিশক্তির সমস্যা এড়ানোর ভালো অভ্যাস
দৈনন্দিন ব্যবহারে, নির্দিষ্ট প্যারামিটার সামান্য পরিবর্তন করার পাশাপাশি, লিনাক্সে মেমরি-সংক্রান্ত সমস্যাগুলো কমানোর জন্য কিছু সেরা অনুশীলন অনুসরণ করার পরামর্শ দেওয়া হয় । প্রথমটি হলো প্রকৃত কাজের চাপের উপর ভিত্তি করে র্যাম এবং সোয়াপের সঠিক আকার নির্ধারণ করা: সাধারণ সার্ভিসের তুলনায় ডেটাবেস, অ্যাপ্লিকেশন সার্ভার, ভারী ডেস্কটপ এনভায়রনমেন্ট বা একাধিক কন্টেইনার লোডের জন্য বেশি মেমরির প্রয়োজন হয়।
সার্ভারগুলিতে, কোন পরিষেবাগুলি চলছে তা নিয়মিত পর্যালোচনা করা এবং যেগুলি ব্যবহৃত হচ্ছে না সেগুলিকে নিষ্ক্রিয় বা বন্ধ করে দেওয়া বাঞ্ছনীয় । ডকার বা অন্যান্য কন্টেইনারযুক্ত পরিবেশে, পরীক্ষা বা অস্থায়ী ডেপ্লয়মেন্ট সম্পন্ন করার পরে, অপ্রয়োজনীয় কন্টেইনার, ইমেজ এবং ভলিউমগুলি পরিষ্কার করে ফেলা ভালো, যাতে অবশিষ্ট প্রসেসগুলি নীরবে মেমরি ব্যবহার করতে না পারে।
কিছু নির্দিষ্ট ধরণের অস্থায়ী কাজের গতি বাড়ানোর জন্য র্যাম ডিস্ক একটি কার্যকর মাধ্যম হতে পারে: যেমন, র্যামে একটি ফাইল সিস্টেম সংজ্ঞায়িত করা হয় এবং এটি অ্যাপ্লিকেশন ডেটা বা ঘন ঘন পরিবর্তিত হওয়া ওয়ার্ক এরিয়াগুলোকে ক্যাশ করতে ব্যবহৃত হয়। যেহেতু এগুলো ভোলাটাইল, তাই এটা বোঝা জরুরি যে কম্পিউটার বন্ধ বা রিস্টার্ট করলে এর ভেতরের ডেটা হারিয়ে যায়। কিন্তু এর বিনিময়ে, এগুলো একটি এসএসডি-র চেয়ে কয়েকগুণ দ্রুত হতে পারে , যা বেশি পরিমাণে অস্থায়ী রিড এবং রাইট কাজের জন্য অত্যন্ত সুবিধাজনক।
নিরাপত্তার দৃষ্টিকোণ থেকে, খোলা পোর্টগুলো পর্যবেক্ষণ করা এবং শুধুমাত্র একান্ত প্রয়োজনীয় পোর্টগুলোই উন্মুক্ত রাখা গুরুত্বপূর্ণ। ক্রিপ্টোমাইনারের মতো ম্যালওয়্যার আক্রমণ প্রায়শই এমন প্রসেসের আকারে চিহ্ন রেখে যায়, যা বিপুল পরিমাণে সিপিইউ ও মেমরি ব্যবহার করে এবং বিভিন্ন টাস্ক ইনস্টল করতে পারে। crontab স্থিতিশীলতা বজায় রাখতে, সন্দেহজনক ক্রন জবগুলো পর্যালোচনা ও পরিষ্কার করা এবং অপ্রয়োজনীয় পোর্টগুলো বন্ধ করা অবাঞ্ছিত প্রসেস দ্বারা মেমরি ব্যবহার হওয়া প্রতিরোধ করতে সাহায্য করে।
অবশেষে, সামগ্রিক পারফরম্যান্সের উপর ফাইল সিস্টেমের প্রভাবকে উপেক্ষা করা উচিত নয়। XFS বা Btrfs-এর মতো আধুনিক বিকল্পগুলো নির্দিষ্ট কিছু ক্ষেত্রে ext4-এর চেয়ে সুবিধা দিতে পারে, বিশেষ করে যখন কাজের চাপ বেশি থাকে বা উন্নত ফিচারগুলো ব্যবহার করা হয়। প্রতিটি ক্ষেত্রেই পরীক্ষা করে দেখা প্রয়োজন, কিন্তু ফাইল সিস্টেমের পছন্দ মেটাডেটা এবং ডিস্ক অ্যাক্সেস কীভাবে পরিচালিত হবে তার উপরও প্রভাব ফেলে, যা পরোক্ষভাবে সিস্টেমের অনুভূত সাবলীলতাকে প্রভাবিত করে।
লিনাক্সে মেমরি ম্যানেজমেন্টে দক্ষতা অর্জনের জন্য র্যাম, সোয়াপ এবং স্টোরেজ কীভাবে বরাদ্দ করা হয়, পেজ, পেজ ক্যাশ, মেমরি প্রেসার এবং OOM-এর মতো ধারণাগুলোর ভূমিকা, এবং zram, zswap, cgroupv2 ও systemd-oomd-এর মতো উন্নত টুল ও মেকানিজমগুলো কীভাবে ব্যবহার করতে হয়, তা বোঝা প্রয়োজন। এই জ্ঞান থাকলে, একটি সাধারণ ল্যাপটপ থেকে শুরু করে বিভিন্ন সার্ভিসে পরিপূর্ণ একটি প্রোডাকশন সার্ভার পর্যন্ত প্রতিটি মেশিনকে নিখুঁতভাবে টিউন করা অনেক সহজ হয়ে যায়, যার ফলে মেমরি সমস্যার উৎস না হয়ে একটি ক্ষিপ্র ও স্থিতিশীল সিস্টেম অর্জনের সহায়ক হয়ে ওঠে, যা কোনো সমস্যা ছাড়াই সর্বোচ্চ লোড সামলাতে প্রস্তুত থাকে ।
