আমি কোনও কার্নেল বিকাশকারী নই তবে আমি বহু বছর ধরে এই ইস্যুতে দর্শন দেওয়ার জন্য ব্যয় করেছি কারণ আমি বহুবার এই প্রকারান্তরে চলে এসেছি। আমি আসলে পুরো পরিস্থিতিটির জন্য একটি রূপক নিয়ে এসেছি তাই আমাকে তা বলি। আমি আমার গল্পে ধরে নেব যে "অদলবদলের" মতো জিনিসগুলির অস্তিত্ব নেই। আজকাল 32 জিবি র্যামের সাথে অদলবদলের খুব বেশি অর্থ নেই।
আপনার এমন এক প্রতিবেশীর কল্পনা করুন যেখানে পাইপগুলির মাধ্যমে প্রতিটি বিল্ডিংয়ের সাথে জল সংযুক্ত থাকে এবং শহরগুলিকে ক্ষমতা পরিচালনা করতে হবে। আসুন ধরে নেওয়া যাক আপনার প্রতি সেকেন্ডে 100 ইউনিট জলের উত্পাদন রয়েছে (এবং সমস্ত অব্যবহৃত ক্ষমতা নষ্ট হয়ে যায় কারণ আপনার কাছে জলাশয়ের ট্যাঙ্ক নেই)। প্রতিটি বাড়িতে (হোম = একটি ছোট অ্যাপ্লিকেশন, একটি টার্মিনাল, ক্লক উইজেট ইত্যাদি) প্রতি সেকেন্ডে এক ইউনিট জল প্রয়োজন। এটি সর্বোত্তম এবং ভাল কারণ আপনার জনসংখ্যা 90 এর মতো তাই প্রত্যেককে পর্যাপ্ত পরিমাণে জল পাওয়া যায়।
এখন মেয়র (= আপনি) সিদ্ধান্ত নিন যে আপনি একটি বড় রেস্তোঁরা (= ব্রাউজার) খুলতে চান। এই রেস্তোঁরাটিতে একাধিক রান্না (= ব্রাউজার ট্যাব) থাকবে। প্রতিটি কুকের জন্য প্রতি সেকেন্ডে 1 ইউনিট জল প্রয়োজন। আপনি 10 টি রান্না দিয়ে শুরু করেন, তাই পুরো পাড়ার জন্য মোট পানির ব্যবহার 100 ইউনিট জল যা এখনও ভাল is
এখন মজাদার জিনিসগুলি শুরু হয়: আপনি আপনার রেস্তোঁরায় একটি অন্য রান্না ভাড়া নেন যা মোট পানির প্রয়োজনীয়তা 101 করে তোলে যা সম্ভবত আপনার কাছে নেই। আপনার কিছু করা দরকার
জল ব্যবস্থাপনার (= কার্নেল) 3 টি বিকল্প রয়েছে।
১. প্রথম বিকল্পটি কেবলমাত্র সেই বাড়িগুলির জন্য পরিষেবাটি সংযোগ বিচ্ছিন্ন করা হয়েছে যারা সম্প্রতি জল ব্যবহার করেননি। এটি ঠিক আছে তবে সংযোগ বিচ্ছিন্ন বাড়ি যদি আবার জলটি ব্যবহার করতে চায় তবে তাদের দীর্ঘ নিবন্ধকরণ প্রক্রিয়াটি আবার শুরু করতে হবে। আরও পানির সংস্থান মুক্ত করতে পরিচালন একাধিক বাড়ি সংযোগ বিচ্ছিন্ন করতে পারে। প্রকৃতপক্ষে, তারা এমন সমস্ত বাড়িগুলি সংযোগ বিচ্ছিন্ন করবে যা সম্প্রতি জল ব্যবহার করেনি যাতে কিছু পরিমাণ নিখরচায় জল সবসময় পাওয়া যায়।
যদিও আপনার শহরটি কাজ করে চলেছে, তবে খারাপ দিকটি হচ্ছে অগ্রগতি বন্ধ হয়ে যায়। আপনার বেশিরভাগ সময় আপনার পরিষেবাটি পুনঃস্থাপনের জন্য জল পরিচালনার জন্য অপেক্ষা করতে ব্যয় করা হয়।
ফাইল-ব্যাকড পৃষ্ঠাগুলি দিয়ে কার্নেল এটি করে। আপনি যদি একটি বড় এক্সিকিউটেবল (ক্রোমের মতো) চালনা করেন তবে এর ফাইলটি মেমরির অনুলিপি করা হয়। যখন স্মৃতিশক্তি কম থাকে বা এমন কিছু অংশ থাকে যা সম্প্রতি অ্যাক্সেস করা হয়নি, কার্নেলটি সেই অংশগুলি ফেলে দিতে পারে কারণ এটি যে কোনওভাবেই সেগুলি ডিস্ক থেকে পুনরায় লোড করতে পারে। যদি এটি অত্যধিকভাবে করা হয়ে থাকে তবে এটি আপনার ডেস্কটপটিকে থামতে পিষবে কারণ সবকিছু কেবল ডিস্ক আইওয়ের জন্য অপেক্ষা করবে। নোট করুন যে আপনি যখন প্রচুর IO করা শুরু করেন তখন কার্নেলটি খুব কম সম্প্রতি ব্যবহৃত পৃষ্ঠাগুলিও ফেলে দেবে। এই কারণেই আপনি ডিভিডি চিত্রের মতো বেশ কয়েকটি বড় ফাইল অনুলিপি করার পরে পটভূমি অ্যাপ্লিকেশনটিতে যেতে কয়েক বছর সময় লাগে ages
এটি আমার জন্য সবচেয়ে বিরক্তিকর আচরণ কারণ আমি হিকআপগুলি ঘৃণা করি এবং এটিতে আপনার কোনও নিয়ন্ত্রণ নেই। এটি স্যুইচ অফ করতে সক্ষম হওয়ায় ভাল লাগবে। আমি লাইন ধরে কিছু ভাবছি
sed -i 's/may_unmap = 1/may_unmap = (vm_swappiness >= 0)/' mm/vmscan.c
এবং তারপরে আপনি এটিকে অক্ষম করতে vm_swappiness সেট করতে পারেন। এটি আমার ছোট পরীক্ষাগুলিতে বেশ ভালভাবে কাজ করেছে তবে হায় হায় আমি কার্নেল বিকাশকারী নই তাই আমি এটি কারও কাছে প্রেরণ করি নি (এবং স্পষ্টত উপরের সামান্য পরিবর্তনটি সম্পূর্ণ নয়)।
2।ব্যবস্থাপনার জলের জন্য নতুন কুকের অনুরোধ অস্বীকার করতে পারে। এটি প্রাথমিকভাবে একটি ভাল ধারণা বলে মনে হচ্ছে। তবে দুটি ডাউনসাইড রয়েছে। প্রথমত, এমন সংস্থাগুলি রয়েছে যা তারা প্রচুর পরিমাণে সাবস্ক্রিপশন অনুরোধ করে যদিও তারা সেগুলি ব্যবহার না করে। এটি করার একটি সম্ভাব্য কারণ হ'ল জল ব্যবস্থাপনার সাথে কথা বলার সমস্ত ওভারহেড এড়ানো যখনই যখন তাদের কিছু অতিরিক্ত জল প্রয়োজন। দিনের পানির উপর নির্ভর করে তাদের পানির ব্যবহার উপরে ও নিচে যায়। উদাহরণস্বরূপ রেস্তোঁরাটির ক্ষেত্রে, মধ্যরাতের তুলনায় সংস্থাকে দুপুরের সময় অনেক বেশি জল প্রয়োজন। সুতরাং তারা ব্যবহার করতে পারে এমন সমস্ত সম্ভাব্য জলের জন্য তারা অনুরোধ করে তবে এটি মধ্যরাতের সময় জলাবদ্ধতা অপচয় করে। সমস্যাটি হ'ল যে সমস্ত সংস্থাগুলি তাদের শিখর ব্যবহারগুলি সঠিকভাবে প্রত্যাশা করতে পারে না তাই তারা আরও বেশি অনুরোধ করার বিষয়ে উদ্বিগ্ন হওয়ার দরকার নেই এই আশায় তারা আরও অনেক বেশি অনুরোধ করে।
জাভার ভার্চুয়াল মেশিন এটিই করে: এটি স্টার্টআপে একটি গোছা মেমরি বরাদ্দ করে এবং তারপরে এটি থেকে কাজ করে। ডিফল্টরূপে যখন আপনার জাভা অ্যাপ্লিকেশন এটি ব্যবহার শুরু করে তখন কার্নেল কেবল মেমরির বরাদ্দ করবে। তবে আপনি যদি অতিরিক্ত কমিট অক্ষম করেন তবে কার্নেলটি সংরক্ষণটিকে গুরুত্ব সহকারে নেবে। এটি কেবলমাত্র যদি এর জন্য সংস্থানগুলি থাকে তবে বরাদ্দটি সফল হতে দেয়।
তবে এই পদ্ধতির সাথে আরও একটি গুরুতর সমস্যা রয়েছে। ধরা যাক যে একটি সংস্থা প্রতিদিন এক ইউনিট জলের জন্য অনুরোধ শুরু করে (10 টির পদক্ষেপের চেয়ে)। অবশেষে আপনি এমন একটি রাজ্যে পৌঁছে যাবেন যেখানে আপনার 0 টি মুক্ত ইউনিট রয়েছে। এখন এই সংস্থা আরও বেশি বরাদ্দ দিতে পারবে না। এটি ঠিক আছে, যিনি যাইহোক বড় সংস্থাগুলি সম্পর্কে চিন্তা করেন। তবে সমস্যাটি হ'ল ছোট বাসাগুলিও বেশি জল অনুরোধ করতে সক্ষম হবে না! হঠাৎ পর্যটকদের আগমন মোকাবেলায় আপনি ছোট ছোট সরকারী বাথরুমগুলি তৈরি করতে সক্ষম হবেন না। আপনি নিকটবর্তী বনের আগুনের জন্য জরুরী জল সরবরাহ করতে পারবেন না।
কম্পিউটারের শর্তাবলী: অতি কম মেমরির পরিস্থিতিতে আপনি কম এক্সটার্ম ছাড়াই কোনও নতুন এক্সটার্ম খুলতে পারবেন না, আপনি আপনার মেশিনে প্রবেশ করতে পারবেন না, আপনি অনুসন্ধানের জন্য একটি নতুন ট্যাব খুলতে পারবেন না সংশোধন করা হয়েছে। অন্য কথায় ওভার কমিট অক্ষম করা মেমরি কম থাকায় আপনার ডেস্কটপকে অকেজো করে তোলে।
৩. এখন কোনও সংস্থা যখন খুব বেশি জল ব্যবহার শুরু করে তখন সমস্যাটি পরিচালনা করার একটি আকর্ষণীয় উপায় এখানে। জল ম্যানেজমেন্ট এটি উড়িয়ে! আক্ষরিক: এটি রেস্তোরাঁর সাইটে যায়, এতে ডায়নামাইট ফেলে দেয় এবং এটি বিস্ফোরিত হওয়া পর্যন্ত অপেক্ষা করে। এটি তাত্ক্ষণিকভাবে শহরের জলের প্রয়োজনীয়তাগুলি অনেকটা হ্রাস করবে যাতে নতুন লোকেরা প্রবেশ করতে পারে, আপনি সর্বজনীন বাথরুম ইত্যাদি তৈরি করতে পারেন You আপনি মেয়র হিসাবে এই আশ্বাসে রেস্তোঁরাটি পুনর্নির্মাণ করতে পারেন যে এবার কম জল লাগবে। উদাহরণস্বরূপ আপনি লোকদের বলবেন যে যদি ইতিমধ্যে খুব বেশি লোকের ভিতরে রেস্তোঁরা না যায় তবে (যেমন আপনি কম ব্রাউজার ট্যাব খুলবেন)।
এটি যখন কর্নেলটি সমস্ত বিকল্পের বাইরে চলে যায় এবং মেমরির প্রয়োজন হয়: এটি ওওএম কিলারকে কল করে। এটি একটি বৃহত অ্যাপ্লিকেশনটি (অনেকগুলি হিউরিস্টিকের ভিত্তিতে) বাছাই করে এবং এটি হত্যা করে, একগুচ্ছ স্মৃতি মুক্ত করে তবে একটি প্রতিক্রিয়াশীল ডেস্কটপ বজায় রাখে। প্রকৃতপক্ষে অ্যান্ড্রয়েড কার্নেল এটি আরও বেশি আক্রমণাত্মকভাবে করে: মেমরি কম থাকলে এটি সর্বাধিক ব্যবহৃত অ্যাপ্লিকেশনটিকে মেরে ফেলে (স্টক কার্নেলের সাথে তুলনা করে যা এটি কেবল সর্বশেষ উপায় হিসাবে কাজ করে)। এটিকে অ্যান্ড্রয়েডে ভাইকিং কিলার বলা হয়।
আমি মনে করি এটি সমস্যার সহজ সমাধানগুলির মধ্যে একটি: এটির চেয়ে বেশি বিকল্প আপনার কাছে রয়েছে বলে মনে হয় না, তবে কেন তাড়াতাড়ি অপেক্ষা করা উচিত না, তাই না? সমস্যাটি হ'ল OOM ঘাতকটিকে এড়ানোর জন্য কার্নেল কখনও কখনও প্রচুর কাজ করে। এজন্য আপনি দেখতে পাচ্ছেন যে আপনার ডেস্কটপটি খুব ধীর গতির এবং কার্নেল এটি সম্পর্কে কিছুই করছে না। তবে সৌভাগ্যক্রমে ওওএম কিলারকে নিজেই অনুরোধ করার একটি বিকল্প রয়েছে! প্রথমে নিশ্চিত হয়ে নিন echo 1 | sudo tee
/proc/sys/kernel/sysrq
যে যাদুটি সিসারকি কীটি সক্ষম হয়েছে (উদাঃ ) তারপরে যখনই আপনি মনে করেন যে কার্নেলটি মেমরিটিতে কম চলছে, কেবল Alt + SysRQ, Alt + f টিপুন।
ঠিক আছে তাই সব সুন্দর তবে আপনি এটি ব্যবহার করে দেখতে চান? কম স্মৃতি পরিস্থিতি পুনরুত্পাদন করা খুব সহজ। আমার এটির জন্য খুব সাধারণ অ্যাপ রয়েছে। আপনার এটি দুটিবার চালানো দরকার। প্রথম রান নির্ধারণ করবে আপনার কতটা নিখরচায় র্যাম রয়েছে, দ্বিতীয় রানটি কম মেমরির পরিস্থিতি তৈরি করবে। নোট করুন যে এই পদ্ধতিটি ধরে নিয়েছে যে আপনি সোয়াপ অক্ষম করেছেন (উদাহরণস্বরূপ করুন sudo swapoff -a
)। কোড এবং ব্যবহার নিম্নলিখিত:
// gcc -std=c99 -Wall -Wextra -Werror -g -o eatmem eatmem.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char** argv)
{
int limit = 123456789;
if (argc >= 2) {
limit = atoi(argv[1]);
}
setbuf(stdout, NULL);
for (int i = 1; i <= limit; i++) {
memset(malloc(1 << 20), 1, 1 << 20);
printf("\rAllocated %5d MiB.", i);
}
sleep(10000);
return 0;
}
এবং আপনি এটি কীভাবে ব্যবহার করবেন তা এখানে:
$ gcc -std=c99 -Wall -Wextra -Werror -g -o eatmem eatmem.c
$ ./eatmem
Allocated 31118 MiB.Killed
$ ./eatmem 31110
Allocated 31110 MiB.Killed
প্রথম অনুরোধটি সনাক্ত করেছে যে আমাদের কাছে ফ্রি র্যামের 31,118 মাইবি রয়েছে। তাই আমি অ্যাপ্লিকেশনটিকে 31,110 মাইবি র্যাম বরাদ্দ করতে বলেছিলাম যাতে কার্নেল এটি হত্যা না করে তবে আমার প্রায় সমস্ত স্মৃতি খায়। আমার সিস্টেম হিমশীতল: এমনকি মাউস পয়েন্টারটিও বুজেনি। আমি Alt + SysRQ, Alt + f টিপ করেছি এবং এটি আমার ডায়েটম প্রক্রিয়াটিকে মেরে ফেলেছে এবং সিস্টেমটি পুনরুদ্ধার করে।
যদিও আমরা আমাদের বিকল্পগুলি কম স্মৃতি পরিস্থিতিতে কী করে তা coveredেকে রেখেছি, তবে সর্বোত্তম পন্থা (অন্য কোনও বিপজ্জনক পরিস্থিতির মতো) প্রথম স্থানটিতে এড়ানো। এটি করার অনেকগুলি উপায় রয়েছে। একটি সাধারণ উপায় আমি দেখেছি হ'ল দুর্ব্যবহারের অ্যাপ্লিকেশনগুলি (ব্রাউজারগুলির মতো) বাকী সিস্টেমের চেয়ে বিভিন্ন পাত্রে রাখুন। সেক্ষেত্রে ব্রাউজারটি আপনার ডেস্কটপটিকে প্রভাবিত করতে সক্ষম হবে না। তবে প্রতিরোধ নিজেই প্রশ্নের ক্ষেত্রের বাইরে তাই আমি এ বিষয়ে লিখব না।
টিএল; ডিআর: যদিও বর্তমানে পেজিং পুরোপুরি এড়ানোর কোনও উপায় নেই তবে আপনি ওভার কমিট অক্ষম করে পুরো সিস্টেম-থামিয়ে প্রশমন করতে পারেন। আপনার সিস্টেমটি তবুও স্বল্প-মেমরির অবস্থার সময় অন্যরকমভাবে ব্যবহারযোগ্য হবে না। উপরে নির্বিশেষে, স্বল্প-স্মৃতি পরিস্থিতিতে কর্নেলের নির্বাচনের বৃহত প্রক্রিয়াটি হারাতে Alt + SysRQ, Alt + f টিপুন। আপনার সিস্টেমটি কয়েক সেকেন্ড পরে তার প্রতিক্রিয়া পুনরুদ্ধার করা উচিত। এটি ধরে নিয়েছে যে আপনার কাছে ম্যাজিক সিস্টার্ক কী সক্ষম রয়েছে (এটি ডিফল্টরূপে নয়)।