আমার কাছে একটি স্ট্যান্ডার্ড লিনাক্স (ডেবিয়ান টেস্টিং) ল্যাপটপ রয়েছে, যার সাথে অদলবদল বিভাজন রয়েছে।
আমি এটি নিয়ে অনেক পরীক্ষা-নিরীক্ষা করি। এর মধ্যে কিছু সত্যই ক্ষুধার্ত স্মৃতিযুক্ত এবং লিনাক্স যেভাবে ডিফল্টরূপে আচরণ করে তা আমার জন্য একটি সমস্যা ... আসুন একটি বোকা উদাহরণ দেই:
- ল্যাপটপের সামনে বসে থাকুন
- একটি টার্মিনাল খুলুন
- টাইপ করুন
python
, তারপরa = [0]*100000000
এখন সম্ভাবনা বেশি যে আপনার কাছে সেই বড় তালিকাটি পরিচালনা করার মতো পর্যাপ্ত র্যাম নেই। লিনাক্সটি র্যামটি পূরণ করবে, তারপরে অদলবদল করবে এবং কয়েক মিনিট পরে, ওওএম কিলারটি ট্রিগার করা হবে এবং প্রায় (প্রায়) এলোমেলো পরিষেবাগুলি মেরে ফেলা হবে এবং আশা করা যায়, আপনি যদি ভাল সময়ে সিটিআরএল + সি আঘাত করেন python
, এবং যদি টার্মিনাল হয় এখনও ফোকাস ছিল, কম্পিউটার আবার প্রতিক্রিয়াশীল হয়ে উঠবে।
অযাচিত অদলবদল এড়াতে আমি কোনও মেমরির সীমাবদ্ধতা প্রয়োগ করতে চাই এবং কোনও প্রক্রিয়াটিকে আমার (র্যামে) চেয়ে বেশি মেমরি বরাদ্দের অধিকারকে অস্বীকার করতে চাই। যদি মেমোরির চাহিদাটি একটি নির্দিষ্ট সীমার নীচে থাকে বা রুট দ্বারা জিজ্ঞাসা করা হয়, তবে কেবল রুট ব্যতীত যে কোনও ব্যবহারকারীর সর্বাধিক মেমরির ক্ষুধার্ত প্রক্রিয়াটি মেরে ফেলুন।
ulimit -Sv [mem]
আমি পিছনে শুনি!
হো হো! "এর cgroups
মাধ্যমে ব্যবহার করুন cgexec
!" প্রথম সারিতে কেউ বলে!
হ্যাঁ, আপনি ঠিক বলেছেন: এগুলি সত্যিই খুব ভাল সমাধান। কিন্তু:
- তারা সিস্টেম-ব্যাপী প্রয়োগ করে না
- সীমা প্রতি-প্রক্রিয়া সেট করা হয়
- সীমাগুলি স্থিতিশীল, আসল পরিমাণটিকে একটি নিখরচায় র্যাম (এএফএইআইকি) উপেক্ষা করে
- এখানে এবং সেখানে তারা বলে যে এগুলি হার্ড সীমাবদ্ধতা প্রয়োগের জন্য আসলেই ভাল সমাধান নয়।
আমি যা চাই তা হ'ল কার্নেলটি বলে: "আপনি ব্যবহারকারীর ফু (রুট নয়) এর মালিক , আপনি প্রচুর স্মৃতি ব্যবহার করেন এবং আমরা স্মৃতিশক্তি হারিয়ে ফেলছি! দুঃখিত, এখন মারা যান!"
বা: "আপনি কী করছেন? আপনার এক্স এমবি দরকার এবং সেখানে কেবল ওয়াই এমবি পাওয়া যায় Yes হ্যাঁ, সোয়াপ্যাপ খালি, তবে আপনার নোংরা কাজটি করার জন্য আপনি SWAP ব্যবহার করার ইচ্ছা করেন না, না? আমি বলেছে না! তোমার জন্য কোন স্মৃতি নেই! আপনি যদি জেদ করেন তবে আপনি মারা যাবেন! "
overcommit_memory
বিশেষ ফাইলটি ব্যবহারযোগ্য মেমরিরূপে র্যাম + স্যুপ ব্যবহার করে। আমি এখনও অদলবদল করব :)
ulimits
একটি খারাপ ধারণা যা প্রায় সর্বত্র দেখানো হয়েছে যেহেতু এটি প্রতি প্রক্রিয়া সীমাবদ্ধতা ... আমি আপনাকে জানিনা :) সম্পর্কে cgroups
, এটি অবশ্যই ভাল তবে এর সাধারণ কিছু নেই: আমি আমার ল্যাপটপের কথা বলছি তবে আমিও একটি "গণনা" সার্ভারের মালিক যা আমরা ভাগ করে নেওয়ার জন্য তিনজন। আমি যদি প্রতি ব্যবহারকারীর সীমাবদ্ধতা প্রয়োগ করি তবে আমি সবচেয়ে খারাপ পরিস্থিতি দ্বারা সীমাবদ্ধ থাকব, তাই না?
/proc/sys/vm/overcommit_memory
কম স্মৃতিতে কার্নেল আচরণকে প্রভাবিত করে।