ओओम-किलर द्वारा मारे गए एक प्रक्रिया के कोर डंप / डिबगिंग प्राप्त करें


10

वहाँ एक कोर डंप पाने के लिए, या एक प्रक्रिया है कि oom- हत्यारा द्वारा मार डाला गया है डिबग करने में सक्षम है?

या यहां तक ​​कि इसके बजाय एबीआरटी का उपयोग करके एक प्रक्रिया को मारने की कोशिश करने के लिए ऊम-हत्यारा सेट करें?

जवाबों:


5

एक अन्य दृष्टिकोण, मेमोरी की ओवरकॉमिटिंग को अक्षम करना है।

अपने स्मृति प्रबंधन के लिए पवित्रता के कुछ झलक बहाल करने के लिए:

  1. OOM किलर अक्षम करें ( vm.oom-kill = 0/etc/sysctl.conf में डालें )
  2. स्मृति ओवरकमिट अक्षम (पुट vm.overcommit_memory = 2में /etc/sysctl.conf)

ये सेटिंग्स पारंपरिक तरीके से लिनक्स का व्यवहार करेंगी (यदि एक प्रक्रिया अनुरोध की तुलना में अधिक मेमोरी उपलब्ध है malloc()तो विफल हो जाएगी और मेमोरी का अनुरोध करने वाली प्रक्रिया उस विफलता से निपटने की उम्मीद करती है)।

ध्यान दें कि यह एक टर्नरी मूल्य है:
  • 0 = "यदि हमारे पास पर्याप्त रैम है तो अनुमान लगाएं"
  • 1 = "हमेशा हां कहें"
  • 2 = "यदि हमारे पास स्मृति नहीं है तो कहो"

यह एप्लिकेशन को मेमोरी से बाहर चलने से निपटने के लिए मजबूर करेगा, और संभवतः इसके लॉग / कोरडंप / आदि आपको कुछ उपयोगी दे सकते हैं।

अद्यतन # 1

नोट: जब आपका सिस्टम मेमोरी से बाहर चला जाता है, तो आप नई प्रक्रियाओं को स्पॉन करने में सक्षम नहीं होंगे! आपको सिस्टम से बाहर रखा जा सकता है।


यह एक भयानक विचार है। आपके सिस्टम पर चलने वाले अधिकांश सॉफ़्टवेयर शायद मेमोरी एलोकेशन विफलता से रिटर्न वैल्यू को सही तरीके से नहीं संभालते हैं। ऐसा करने से कोड-रास्तों का कारण होगा जो व्यावहारिक रूप से कभी भी चलाने के लिए किसी के द्वारा निष्पादित नहीं किया जाता है और सबसे खराब स्थिति में भी आपके सिस्टम पर इन अप्रयुक्त और अप्रत्याशित कोड पथ को चलाने से सुरक्षा कमजोरियों का परिचय हो सकता है।
केजे त्सानकट्सिस

4
echo 1 > /proc/sys/vm/oom_dump_tasks

जो अधिकतम के बारे में लगता है कि आप आउट-ऑफ-मेमोरी त्रुटियों को प्रदर्शित करने के लिए कर्नेल प्राप्त कर सकते हैं।

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

जब कर्नेल एक OOM- हत्या करता है तो एक सिस्टम-वाइड टास्क डंप (कर्नेल थ्रेड्स को छोड़कर) उत्पन्न करने में सक्षम करता है और इसमें pid, uid, tgid, vm size, rss, nr_ptes, swapents, oom_score_adj स्कोर, और नाम जैसी जानकारी शामिल होती है। यह निर्धारित करने में मददगार है कि OOM किलर को क्यों लगाया गया था, जिससे उस दुष्ट कार्य की पहचान की जा सके, और यह निर्धारित करने के लिए कि OOM हत्यारे ने उस कार्य को चुना जिसे उसने मारने के लिए किया था।

यदि इसे शून्य पर सेट किया जाता है, तो यह जानकारी दबा दी जाती है। हजारों कार्यों के साथ बहुत बड़ी प्रणालियों पर प्रत्येक के लिए मेमोरी स्टेट की जानकारी को डंप करना संभव नहीं है। जब सूचना वांछित न हो, तो ऐसी प्रणालियों को OOM स्थितियों में एक प्रदर्शन जुर्माना लगाने के लिए मजबूर नहीं किया जाना चाहिए।

यदि इसे गैर-शून्य पर सेट किया जाता है, तो यह जानकारी तब दिखाई जाती है जब ओओएम हत्यारा वास्तव में एक मेमोरी-हॉगिंग कार्य को मारता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.