Linux choom कमांड: OOM Killer स्कोर बदलें और प्रोसेस बचाएं

अवलोकन

लिनक्स सर्वर पर रैम (RAM) समाप्त होने की गंभीर स्थिति में कर्नेल का आउट-ऑफ-मेमोरी (OOM) किलर सबसे पहले किस प्रोसेस को समाप्त करेगा, इसका निर्णय OOM स्कोर के आधार पर होता है। इस व्यावहारिक गाइड में हम choom टूल का उपयोग करके इसी स्कोर को प्रबंधित करने की तकनीक सीखेंगे। यहां सक्रिय प्रोसेस के स्कोर की जांच, समाप्ति प्राथमिकता में बदलाव और महत्वपूर्ण सेवाओं को क्रैश होने से बचाने के सभी चरण सीधे टर्मिनल पर करके दिखाए गए हैं।

1. choom यूटिलिटी का परिचय और आवश्यक पैकेज सेटअप

सिस्टम में choom कमांड का परीक्षण करने और बैकग्राउंड प्रोसेस को ट्रैक करने के लिए सबसे पहले util-linux तथा procps पैकेज को इंस्टॉल या अपडेट कर लें।

apt-get update -qq && apt-get install -y util-linux procps

यह कमांड कर्नेल के उस आंतरिक मान (oom_score_adj) को नियंत्रित करने की सुविधा देता है, जिसे OOM किलर प्रोसेस टर्मिनेशन के दौरान गणना में लेता है।
इसके सिंटैक्स और उपलब्ध फ़्लैग्स को समझने के लिए --help विकल्प का उपयोग करें।
⚙️ [मुख्य विकल्प]

-p, --pid : लक्षित प्रोसेस की विशिष्ट पहचान संख्या (PID) सेट करता है जिसका स्कोर देखना या बदलना हो।
-n, --adjust : OOM किलर समायोजन मान (-1000 से 1000 तक) निर्धारित करता है।
-h, --help : कमांड के उपयोग और सहायता से जुड़ी जानकारी प्रदर्शित करता है।
-V, --version : स्थापित टूल का वर्शन विवरण दिखाता है।

choom –help

2. रनिंग प्रोसेस का OOM स्कोर जांचना

परीक्षण के लिए एक सुरक्षित वातावरण तैयार करते हैं। इसके लिए 10 मिनट तक चलने वाली एक डमी बैकग्राउंड प्रोसेस शुरू करने हेतु sleep 600 & चलाएं।

sleep 600 &

अब pgrep की मदद से इस स्लीप प्रोसेस की PID निकाल कर TARGET_PID वैरिएबल में सुरक्षित करें और choom -p से इसका वर्तमान oom_score_adj मान चेक करें।
सामान्य रूप से शुरू की गई किसी भी प्रोसेस का डिफ़ॉल्ट मान 0 दिखाई देगा, जिसका अर्थ है कि इसे कोई विशेष वरीयता या छूट नहीं मिली है।

TARGET_PID=$(pgrep -f ‘sleep 600’ | tail -n 1) && choom -p $TARGET_PID

choom द्वारा दिखाए गए आंकड़े की पुष्टि सीधे कर्नेल स्तर पर करने के लिए /proc वर्चुअल फ़ाइल सिस्टम के भीतर oom_score_adj फ़ाइल पढ़ें।
फ़ाइल का आउटपुट भी सटीक रूप से 0 दिखाता है, जिससे यह सिद्ध होता है कि कर्नेल पैरामीटर और कमांड आउटपुट में पूर्ण तालमेल है।

TARGET_PID=$(pgrep -f ‘sleep 600’ | tail -n 1) && cat /proc/$TARGET_PID/oom_score_adj

3. choom के माध्यम से OOM प्राथमिकता मान संशोधित करना

सक्रिय प्रोसेस की किलिंग प्रायोरिटी बढ़ाने के लिए हम -n विकल्प के साथ 500 मान देते हुए sudo विशेषाधिकार के साथ choom निष्पादित करेंगे।
जब oom_score_adj को धनात्मक (positive) संख्या पर सेट किया जाता है, तो मेमोरी का संकट होने पर लिनक्स कर्नेल इस प्रोसेस को सबसे पहले समाप्त करने का प्रयास करता है।

TARGET_PID=$(pgrep -f ‘sleep 600’ | tail -n 1) && sudo choom -n 500 -p $TARGET_PID

संशोधित मान के प्रभावी होने की पुष्टि करने के लिए choom -p का पुनः उपयोग करें।
कंसोल पर अब पुराना मान 0 हटकर नया स्कोर 500 दिखाई देगा, जो यह दर्शाता है कि कर्नेल ने नए पैरामीटर को तुरंत लागू कर दिया है।

TARGET_PID=$(pgrep -f ‘sleep 600’ | tail -n 1) && choom -p $TARGET_PID

4. सुरक्षित मोड में प्रोसेस आरंभ करना और कार्यक्षेत्र की सफाई

डेटाबेस या वेब सर्वर जैसी महत्वपूर्ण सेवाओं को बूट के समय ही OOM किलर से पूर्ण सुरक्षा देने के लिए -1000 मान के साथ सीधे कमांड शुरू की जा सकती है।
-1000 का मान सेट करने पर कर्नेल को सख्त निर्देश मिलता है कि रैम की अत्यधिक कमी होने पर भी इस प्रोसेस को किसी भी हालत में न मारा जाए।

sudo choom -n -1000 – sleep 10 &

इस नई प्रोसेस की PID को TARGET_PID में स्टोर करके choom -p से सत्यापित करें।
परिणाम में -1000 प्रदर्शित होता है, जो साबित करता है कि निष्पादन के क्षण से ही प्रोसेस OOM किलर से सुरक्षित हो चुकी है।

TARGET_PID=$(pgrep -f ‘sleep 10’ | tail -n 1) && choom -p $TARGET_PID

परीक्षण समाप्त होने के बाद पृष्ठभूमि में चल रहे डमी टास्क को बंद करने के लिए pkill -f 'sleep 600' || true चलाएं।
इससे सिस्टम रिसोर्स मुक्त हो जाएंगे और अनावश्यक रूप से कोई बैकग्राउंड प्रोसेस सक्रिय नहीं रहेगी।

pkill -f ‘sleep 600’ || true

इस प्रकार आपने choom यूटिलिटी का उपयोग करके OOM स्कोर को प्रबंधित करने और क्रिटिकल लिनक्स प्रोसेस को सुरक्षित रखने की संपूर्ण कार्यप्रणाली समझ ली है।
अपने प्रोडक्शन सर्वर की आवश्यकताओं के अनुसार प्रोसेस वरीयताएं तय करके आप मेमोरी की कमी में भी सर्वर को सुचारू और स्थिर रख सकते हैं।