मैं ओओएम हत्यारे के दांत फिर से कैसे दे सकता हूं?


12

दिन में वापस मैं ओओएम-हत्यारा को शाप देने के लिए इस्तेमाल किया गया था, जो मैं आक्रामक था और उन ऐप को मार रहा था जो मैं उपयोग कर रहा था। अब, जैसा कि मैं समय-समय पर अपने सिस्टम को 15 मिनट के लिए कुछ बुरे व्यवहार वाले कार्यक्रम के कारण थ्रश देखता हूं, और फिर अंत में एक शक्ति-शक्ति-बंद का सहारा लेता हूं क्योंकि यह कीबोर्ड का जवाब नहीं देगा, मुझे लगता है कि मुझे यह महसूस हुआ कि मैं बेहतर था तब।

मैं OOM- हत्यारे को उसके पुराने, रक्तहीन तरीकों से कैसे पुनर्स्थापित करूं?


1
एक समस्या पैदा करने वाले कार्यक्रमों पर एक नज़र डालें, और उन स्मृति की मात्रा को सीमित करें जिनके साथ वे चूस सकते हैंlimits.conf
लॉरेंस

जवाबों:


4

मैं आपके द्वारा उपलब्ध स्वैप स्थान की मात्रा को कम कर दूंगा। इन दिनों आम तौर पर भौतिक स्मृति (या कभी-कभी दो बार बहुत अधिक) के रूप में अधिक स्वैप आवंटित करने का प्रयास होता है। इस के साथ समस्या यह है कि जब कुछ धराशायी हो जाता है, सिस्टम डिस्क के लिए स्मृति, और पीछे से "शफ़ल" बातें करने के प्रयास के एक मौत सर्पिल में चला जाता है, और यह कर रही शुरू होता है तो बहुत की है कि यह प्रतिक्रिया करने के लिए समय नहीं है उपयोगकर्ता इनपुट के लिए।

अच्छे-ओल-दिनों में, डिस्क (और पीछे) में पूरी प्रक्रियाएं बदली गईं, इसलिए बड़े स्वैप की आवश्यकता थी।

आधुनिक वर्चुअल मेमोरी सिस्टम में, मेमोरी को ब्लॉक (संपूर्ण प्रक्रियाओं के बजाय) में स्वैप किया जाता है, जिससे आप छोटे स्वैप के साथ प्राप्त कर सकते हैं। आपके परिदृश्य में, आप मारे गए प्रक्रियाओं से बेहतर होंगे, इसलिए छोटे स्वैप के साथ चलने से OOM जल्द ही हत्या की प्रक्रिया शुरू कर देगा (बजाय सिस्टम डिस्क को / स्वैप से सामान की अदला-बदली की मात्रा खर्च करने के)।


मेरे पास शून्य स्वैप है, और मेरा सिस्टम 20+ मिनट तक लॉक रहता है जब मेरे पास क्रोमियम में एक अनंत जावास्क्रिप्ट लूप होता है, जो किसी सरणी या किसी चीज़ पर धकेलता है। मुझे OOMK को ट्रिगर करने की आवश्यकता है इससे पहले कि मेरा सिस्टम बेकार है, उसके बाद नहीं।
जेसनवॉफ

0

यहाँ मेरे लिए क्या काम किया गया है:

echo 1 > /proc/sys/vm/oom_kill_allocating_task

वह सिर्फ इस बूट के लिए है। आप अपने ब्राउज़र के इंस्पेक्टर के कंसोल टैब में निम्नलिखित चलाकर परीक्षण कर सकते हैं:

a = []; while (true) { a.push(1); }

यदि आप इस सेटिंग से खुश हैं, तो आप भविष्य के सभी बूट्स के लिए डिफ़ॉल्ट रूप से बना सकते हैं:

echo "vm.oom_kill_allocating_task=1" >> /etc/sysctl.conf
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.