ওম কিলার কাজ করছে না?


41

আমি যা বুঝি তার জন্য, যখন সিস্টেমটি নিখরচায় মেমরি না রাখে, কার্নেলের কিছু মেমরি ফিরে পেতে প্রক্রিয়াগুলি শুরু করা উচিত। তবে আমার সিস্টেমে এটি মোটেই ঘটে না।

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

এখানে অদ্ভুত অংশটি হ'ল কম্পিউটার যখন হিমশীতল হয় তখন হার্ড ড্রাইভের নেতৃত্বে চালু হয়ে কম্পিউটারটি রিবুট না হওয়া পর্যন্ত সেভাবেই থাকে, হয় আমার কাছে অদলবদলের পার্টিশন লাগানো আছে বা না!

সুতরাং আমার প্রশ্নগুলি হ'ল:

  1. এই আচরণ কি স্বাভাবিক? এটি অদ্ভুত যে কোনও সাধারণ ব্যবহারকারী হিসাবে কার্যকর একটি অ্যাপ্লিকেশন কেবল এইভাবে সিস্টেমটি ক্র্যাশ করতে পারে ...
  2. যখন আমি খুব বেশি (বা সর্বাধিক) মেমরি পেয়েছি তখন উবুন্টু কেবলমাত্র সেই অ্যাপ্লিকেশনগুলিকেই মেরে ফেলতে পারে এমন কোনও উপায় আছে?

অতিরিক্ত তথ্য

  • উবুন্টু 12.04.3
  • কার্নেল 3.5.0-44
  • র‌্যাম: 4 জিবি থেকে ~ 3.7 জিবি (গ্রাফিক্স কার্ডের সাথে ভাগ করা)। *

    $ tail -n+1 /proc/sys/vm/overcommit_*
    ==> /proc/sys/vm/overcommit_memory <==
    0
    
    ==> /proc/sys/vm/overcommit_ratio <==
    50
    
    $ cat /proc/swaps
    Filename                Type        Size    Used    Priority
    /dev/dm-1                               partition   4194300 344696  -1
    

আমি নিশ্চিত না কেন এটি কাজ করছে না। চেষ্টা tail -n+1 /proc/sys/vm/overcommit_*করে আউটপুট যুক্ত করুন। এখানেও দেখুন: আমি কীভাবে ওম-কিলারটি কনফিগার করব
কিরি

সুতরাং আপনার অদলবদল স্থান নিয়ে কি হচ্ছে? আপনি কি #vmstat 1 100 বা এর মতো কিছু ভিএমস্ট্যাট আউটপুট পোস্ট করতে পারেন? এবং আমাদের বিড়াল / ইত্যাদি / fstab দেখাও যা হওয়া উচিত তা নির্দিষ্ট পরিমাণে মেমরির ব্যবহারের ক্ষেত্রে হয়, আপনার অদলবদল লেখা শুরু করা উচিত। মেমরি এবং অদলবদল স্থান "পূর্ণ" না হওয়া পর্যন্ত হত্যা প্রক্রিয়াগুলি হওয়া উচিত নয়।
j0h

এছাড়াও #swapon -a
j0h

@ j0h অদলবদলের সাথে এটি ভালভাবে কাজ করছে বলে মনে হচ্ছে (কিছু সময়ের পরে প্রক্রিয়াটি এমন কোনও কিছু দিয়ে ক্র্যাশ হয়ে গেছে Allocation failed)। তবে অদলবদল ছাড়াই এটি কেবল কম্পিউটারকে হিমশীতল করে। এটি এইভাবে কাজ করার কথা রয়েছে (কেবল সোয়াপ ব্যবহারের সময় হত্যা করব)?
সালেম

উত্তর:


36

থেকে সরকারী /proc/sys/vm/*ডকুমেন্টেশন :

oom_kill_allocating_task

এটি স্মৃতি-বহির্ভূত পরিস্থিতিতে OOM- ট্রিগার কার্যকে হত্যা করতে সক্ষম বা অক্ষম করে।

যদি এটি শূন্যতে সেট করা থাকে তবে ওওএম কিলার পুরো টাসলিস্টের মাধ্যমে স্ক্যান করবে এবং খুনের জন্য হিউরিস্টিকের ভিত্তিতে একটি টাস্ক নির্বাচন করবে। এটি সাধারণত একটি দুর্বৃত্ত মেমরি-হগিং কার্য নির্বাচন করে যা নিহত হওয়ার পরে প্রচুর পরিমাণে স্মৃতি মুক্ত করে।

যদি এটি অ-শূন্যতে সেট করা থাকে, তবে ওওএম হত্যাকারী স্মৃতি-বহির্গামী অবস্থার সূত্রপাতকারী কার্যটিকে কেবল খুন করে। এটি ব্যয়বহুল টাসলিস্ট স্ক্যান এড়িয়ে চলে।

যদি প্যানিক_অন_মুম নির্বাচিত হয় তবে oom_kill_allocating_task এ যা কিছু মান ব্যবহৃত হয় তার চেয়ে বেশি অগ্রাধিকার লাগে।

ডিফল্ট মান 0 হয়।

সংক্ষিপ্তসার হিসাবে, সেট oom_kill_allocating_taskকরার সময় 1, সিস্টেমটি মারার প্রক্রিয়াগুলির সন্ধান করার পরিবর্তে, এটি ব্যয়বহুল এবং ধীর কাজ, কার্নেলটি কেবল প্রক্রিয়াটি মেরে ফেলবে যা সিস্টেমটিকে স্মৃতি থেকে সরিয়ে দেয়।

আমার নিজের অভিজ্ঞতা থেকে, যখন কোনও ওওএম ট্রিগার করা হয় তখন কার্নেলের কাছে এ জাতীয় স্ক্যান করার মতো "শক্তি" আর অবশিষ্ট থাকে না, ফলে সিস্টেমটি সম্পূর্ণ অকেজো হয়ে যায়।

এছাড়াও, সমস্যাটি যে সমস্যার কারণে ঘটেছে কেবল এটিই মেরে ফেলা আরও স্পষ্ট হবে, সুতরাং কেন এটি 0ডিফল্টরূপে সেট করা হয়েছে তা আমি বুঝতে ব্যর্থ ।

পরীক্ষার জন্য, আপনি কেবল সঠিক সিউডো-ফাইলটিতে লিখতে পারেন /proc/sys/vm/, যা পরের পুনরায় বুটটিতে পূর্বাবস্থায় ফিরে যাবে:

echo 1 | sudo tee /proc/sys/vm/oom_kill_allocating_task

স্থায়ী ফিক্সের জন্য, এক্সটেনশন ( উদাহরণস্বরূপ) সহ একটি /etc/sysctl.confনতুন ফাইলের নীচে বা নীচে লিখুন :/etc/sysctl.d/.conf/etc/sysctl.d/local.conf

vm.oom_kill_allocating_task = 1

2
এটি সর্বদা উবুন্টুতে 0 তে সেট করা ছিল? কারণ আমি মনে করি এটি স্বয়ংক্রিয়ভাবে হত্যা করতে ব্যবহৃত হয়েছিল, তবে কয়েকটি সংস্করণ থেকে এটি করা বন্ধ করে দিয়েছে।
স্কিরিট

1
@ স্পারিট এটি আমি সত্যিই জানি না, তবে এটি 2010 সালে ফিরে ব্যবহার করা কার্নেলগুলিতে 0 এ সেট করা হয়েছিল (দেবিয়ান, লিকোরিক্স এবং জিআরএমএল)।
তেরেসা ই জুনিয়র

"এছাড়াও, এটি যে সমস্যাটি সৃষ্টি করেছিল তা কেবল খুন করা আরও স্পষ্ট হবে, সুতরাং কেন এটি 0ডিফল্টরূপে সেট করা হয়েছে তা আমি বুঝতে ব্যর্থ ।" - কারণ যে প্রক্রিয়াটি মেমোরিটির জন্য অনুরোধ করেছিল তা অগত্যা যে "সমস্যার কারণ" হয়েছিল isn't প্রক্রিয়া এ যদি সিস্টেমের স্মৃতিশক্তিটির 99% হোগ করে, তবে প্রক্রিয়া বি, যা 0.9% ব্যবহার করছে, এমনটি ঘটবে যা দুর্ভাগ্যক্রমে ওম কিলারকে ট্রিগার করে, বি "সমস্যার কারণ" দেয় না এবং এটি কোনও অর্থবোধ করে না বি কে মেরে ফেলুন যে নীতিমালা পুরোপুরি অপ্রয়োজনীয় কম মেমরির প্রক্রিয়াগুলি একটি ভিন্ন প্রক্রিয়ার রানওয়ে মেমরির ব্যবহারের কারণে সুযোগের ফলে নিহত হওয়ার ঝুঁকিপূর্ণ রয়েছে ।
মার্ক আমেরিকা

1
@ মারক্যামেরি আসল সমস্যাটি হ'ল লিনাক্স কেবল প্রয়োজনীয় প্রক্রিয়াটি হত্যার পরিবর্তে, রিটার্ডের মতো ছোটাছুটি শুরু করে, এমনকি 128 মেগাবাইট পর্যন্তvm.admin_reserve_kbytes বাড়িয়ে বলা হলেও । সেটিং সমস্যাটি হ্রাস করে বলে মনে হচ্ছে, এটি আসলেই সমাধান করে না (এবং উবুন্টু ইতিমধ্যে ডিফল্টভাবে কাঁটাচামচ বোমা নিয়ে কাজ করে)। vm.oom_kill_allocating_task = 1
তেরেসা ই জুনিয়র

1
হতে পারে আরও মার্জিতsudo sysctl -w vm.oom_kill_allocating_task=1
পাবলো এ

9

আপডেট: বাগ ঠিক করা হয়েছে।

টেরেসার উত্তরটি সমস্যার সমাধানের পক্ষে যথেষ্ট এবং ভাল।

অতিরিক্ত হিসাবে, আমি একটি বাগ রিপোর্ট দায়ের করেছি কারণ এটি অবশ্যই একটি ভাঙ্গা আচরণ।


কেন আপনি নিম্নচাপে পড়েছেন তা আমি জানি না, তবে এটি আমার কাছে কার্নেল বাগের মতো শোনাচ্ছে। আমি এটির সাথে আজ একটি বড় বিশ্ববিদ্যালয়ের সার্ভার ক্র্যাশ করেছি এবং কয়েক সপ্তাহ ধরে চলমান কিছু প্রক্রিয়া হত্যা করেছি ... যদিও এই বাগ রিপোর্টটি ফাইল করার জন্য ধন্যবাদ!
শ্যাপাচ্যাচার

7
২০১৪ সালে, এবং 2018 (এবং 18.04) এ ওওএম হত্যাকারী আবার কিছু করছে না ঠিক হয়ে গেছে।
স্কিরিট

0

আপনি ইওম কিলার চেষ্টা করতে পারেন , একটি ওওএম কিলার যা ব্যবহারকারীর স্পেসে কাজ করে এবং একটি ওওএম পরিস্থিতির বৃহত্তম প্রক্রিয়াটি হত্যার চেষ্টা করে।


-1

সবার আগে আমি 13.10 (ক্লিন ইনস্টল করুন, আপনার ডেটা সংরক্ষণ করুন) এ আপডেটটি প্রস্তাব করছি।

আপনি যদি ভিএম.সেস্পেনসিকে 10 এ পরিবর্তন করতে চান না এবং যদি আপনার র‌্যাম ইনস্টল করে zRAM সমস্যা হয়।


2
আমি সেই ব্যক্তি নই যিনি আপনাকে নিম্নোক্ত করেছিলেন, তবে সাধারণত, কম করা ভালের vm.swappinessচেয়ে আরও বেশি ক্ষতি করে, লো মেমোরি সমস্যাজনিত সিস্টেমে আরও বেশি ক্ষতি করে।
তেরেসা ই জুনিয়র

আপনি যখন প্রথম ভেড়াটি সংকুচিত করেন না এবং এরপরে আপনি ডিস্ক ব্যবহার এড়িয়ে যান যা খুব ধীর এবং আপনার কম্পিউটারকে হিমশীতল করে তুলতে পারে।
ব্রাস্ক

তত্ত্বগতভাবে, জেডআরএম একটি দুর্দান্ত জিনিস, তবে এটি সিপিইউ ক্ষুধার্ত, এবং সাধারণত এটি ব্যয়ের জন্য মূল্যবান নয়। মেমরিটি সাধারণত বিদ্যুতের চেয়ে সস্তা। এবং, একটি ল্যাপটপে যেখানে র‌্যাম আপগ্রেড করা আরও ব্যয়বহুল, সিপিইউ ব্যবহার বেশিরভাগই অনাকাঙ্ক্ষিত।
তেরেসা ই জুনিয়র

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

তাঁর প্রশ্ন থেকে এটা পরিষ্কার যে তিনি একটি অনুপযুক্ত স্ক্রিপ্ট লিখতে পারেন যা তার চেয়ে বেশি খায় (এবং আমি নিজেই এটি ইতিমধ্যে সম্পন্ন করেছি)। এইরকম পরিস্থিতিতে, আপনি স্ক্রিপ্টটি কয়েক সেকেন্ডের মধ্যে র‍্যামের গিগা বাইটগুলি দখল করতে দেখতে পারেন এবং zRAM উদ্ধার করতে পারবেন না, কারণ স্ক্রিপ্টটি কখনই পর্যাপ্ত পরিমাণে সন্তুষ্ট হতে পারে না।
তেরেসা ই জুনিয়র
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.