OOM हत्यारा ठीक से काम नहीं करता है, एक जमे हुए ओएस की ओर जाता है


23

वर्षों से, मेरे ऑपरेटिंग सिस्टम का OOM किलर ठीक से काम नहीं करता है और एक जमे हुए सिस्टम की ओर जाता है।
जब मेमोरी का उपयोग बहुत अधिक होता है, तो पूरी प्रणाली "फ्रीज" (वास्तव में: अत्यंत धीमी गति से) हो जाती है, स्मृति को मुक्त करने के लिए प्रक्रियाओं को मारने के बजाय घंटों या दिनों तक ।
रीसेट करने के लिए खुद को इस्तीफा देने से 7 दिन पहले मैंने जो अधिकतम दर्ज किया है।
जब ओओएम पहुंचने वाला होता है, तो असहनीय बनने से पहले इओविट बहुत अधिक (~ 70%) होता है।
उपकरण: iotopसे पता चला है कि हर कार्यक्रम मेरी हार्ड ड्राइव से एक बहुत ही उच्च थ्रूपुट (प्रति दस एमबी / सेकंड) पर पढ़ रहे हैं।
वे कार्यक्रम क्या पढ़ रहे हैं?
- निर्देशिका पदानुक्रम?
- निष्पादन योग्य कोड ही?
मैं अब ठीक नहीं है।

[संपादित करें] जिस समय मैंने यह संदेश लिखा था (2017 में) मैं एक uptodate ArchLinux (4.9.27-1-lts) का उपयोग कर रहा था, लेकिन वर्षों पहले से ही इस मुद्दे का अनुभव कर चुका था।
मैंने विभिन्न लिनक्स वितरण और विभिन्न हार्डवेयर कॉन्फ़िगरेशन के साथ एक ही समस्या का अनुभव किया है।
वर्तमान में (2019), मैं एक uptodate डेबियन 9.6 (4.9.0) का उपयोग कर रहा हूं मेरे पास 16 जीबी की शारीरिक रैम है, एक एसएसडी है जिस पर मेरा ओएस स्थापित है, और कोई स्वैप विभाजन नहीं है।

राम की राशि के कारण, मेरे पास स्वैप विभाजन को सक्षम करने की आवश्यकता नहीं है, क्योंकि यह मुद्दे की स्पष्टता में देरी करेगा।
इसके अलावा, SSDs की अदला-बदली भी अक्सर डिस्क के जीवनकाल को कम कर सकती है।
वैसे, मैंने पहले से ही एक स्वैप विभाजन के साथ और उसके बिना कोशिश की है, यह केवल समस्या की स्पष्टता में देरी करने के लिए साबित हुआ है, लेकिन समाधान नहीं है।

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

मुझे आश्चर्य है कि अगर लिनक्स चल रहे कार्यक्रमों के निष्पादन योग्य कोड पृष्ठों को नहीं गिराएगा, तो यह बताएगा कि ऐसे प्रोग्राम जो आमतौर पर बहुत अधिक डेटा नहीं पढ़ते हैं, इस स्थिति में इस तरह से व्यवहार करते हैं।

मैंने इस मुद्दे को ठीक करने की उम्मीद में कई चीजों की कोशिश की है।
एक (1 जीबी) पर सेट /proc/sys/vm/min_free_kbytesकरना था 1000000
क्योंकि यह 1 जीबी मुक्त रहना चाहिए, मैंने सोचा था कि यह मेमोरी महत्वपूर्ण डेटा को कैश करने के लिए लिनक्स द्वारा आरक्षित होगी।
लेकिन यह काम नहीं किया है।

इसके अलावा, मैं, को परिभाषित करते हुए कि जोड़ने के लिए यह सिद्धांत में महान ध्वनि सकता है, भले ही, भौतिक स्मृति के आकार के आभासी स्मृति के आकार को सीमित उपयोगी लगता है /proc/sys/vm/overcommit_memoryकरने के लिए 2शालीनता से तकनीकी रूप से मेरी स्थिति में संभव नहीं है, क्योंकि आवेदनों की तरह कि मैं उपयोग करता हूं, कुछ कारणों से प्रभावी ढंग से उपयोग करने की तुलना में अधिक आभासी मेमोरी की आवश्यकता होती है।
फ़ाइल के अनुसार /proc/meminfo, Commited_ASमूल्य अक्सर मेरे सिस्टम पर भौतिक रैम के दोहरे से अधिक होता है (16 जीबी, कमिटेड_एएस अक्सर> 32 जीबी है)।

मैंने इस समस्या /proc/sys/vm/overcommit_memoryको उसके डिफ़ॉल्ट मान के साथ अनुभव किया है : 0और थोड़ी देर के लिए मैंने इसे परिभाषित किया है: 1क्योंकि मैंने OOM हत्यारे द्वारा मारे जाने वाले कार्यक्रमों को गलत तरीके से व्यवहार करने के बजाय पसंद किया क्योंकि वे वापसी के मूल्यों की जांच नहीं mallocकरते हैं आवंटन से इनकार कर दिया जाता है।

जब मैं आईआरसी पर इस मुद्दे के बारे में बात कर रहा था , तो मैंने अन्य लिनक्स उपयोगकर्ताओं से मुलाकात की है जिन्होंने इस समस्या का अनुभव किया है, इसलिए मुझे लगता है कि बहुत सारे उपयोगकर्ता इससे चिंतित हैं।
मेरे लिए यह स्वीकार्य नहीं है क्योंकि उच्च मेमोरी उपयोग के साथ भी विंडोज बेहतर तरीके से व्यवहार करता है।

यदि आपको अधिक जानकारी चाहिए, तो एक सुझाव दें, कृपया मुझे बताएं।

प्रलेखन:
https://en.wikipedia.org/wiki/Thrashing_%28computer_science%29
https://en.wikipedia.org/wiki/Memory_overcommitment
https://www.kernel.org/doc.Documentation/sysctl/vm। txt
https://www.kernel.org/doc/Documentation/vm/overcommit-accounting
https://lwn.net/Articles/317814/

वे इसके बारे में बात करते हैं:
लिनक्स आउट-ऑफ-मेमोरी (OOM) हत्यारा स्वचालित रूप से क्यों नहीं चलता है, लेकिन sysrq-key पर काम करता है?
OOM- हत्यारा कभी-कभी संसाधन हॉग को मारने में विफल क्यों होता है?
ओओएम किलर को लोड करना
क्या ओम्-किलर को जबरन स्वैपिंग पर ट्रिगर करना संभव है?
OOM स्थिति के पास उच्च विलंबता से कैसे बचें?
https://lwn.net/Articles/104179/
https://bbs.archlinux.org/viewtopic.php?id=233843


1
मुझे लगता है कि आपको क्या उम्मीद करनी चाहिए, अगर आप जोर दे रहे हैं, लेकिन आप वास्तव में 100% "उपयोग" नहीं कर रहे हैं, यानी बहुत अधिक मेमोरी उपयोग है जो फ़ाइल-समर्थित है, जिसे "बफ़ / कैश" के रूप में गिना जाता है। (उह, यह वाक्यांश आपके tmpfs आवंटन को तुच्छ मानता है, क्योंकि ये "बफ़ / कैश" के रूप में दिखाई देते हैं, लेकिन एक भौतिक फाइल सिस्टम के लिए तैयार नहीं हो सकते)। min_free_kbytesप्रासंगिक नहीं है, यह कैश्ड पृष्ठों के लिए आरक्षित नहीं है। AFAICT vm sysctls में से कोई भी विशेष रूप से कैश किए गए पृष्ठों के लिए किसी भी मेमोरी को संग्रहीत करने की अनुमति नहीं देता है, अर्थात MAP_ANONYMOUS आवंटन सीमित करता है :(।
sourcejedi

2
मैं वर्षों से बिना किसी सफलता के इस सटीक मुद्दे का हल ढूंढ रहा हूं। मेरा मानना ​​है कि मैंने पहली बार SSD द्वारा अपने HDD को बदलने के बाद समस्या को देखा, जिसने मुझे पूरी तरह से स्वैप करने में अक्षम कर दिया, लेकिन मैं वास्तव में गारंटी नहीं दे सकता कि यह इन परिवर्तनों से पहले कभी नहीं हुआ था, इसलिए यह असंबंधित हो सकता है। मैं आर्चलिनक्स btw पर हूं।
ब्रूनोकोदुत्र


1
@ dsstorefile1 धन्यवाद, मैं कोशिश करूंगा कि। लेकिन यह कैसे सुनिश्चित करने के लिए ओओएम हत्यारे को ट्रिगर कर सकता है जब इस स्थिति में कर्नेल ठीक से नहीं कर सकता है?
M89

1
यह तब मदद करता है जब क्रोम मेरे सभी रैम के माध्यम से लीक करने में कामयाब रहा ... (हालांकि मैंने अंततः एक वास्तविक डिस्क स्वैप विभाजन को जोड़ा और अंततः रैम की एक अच्छी मात्रा में अपग्रेड किया)
गर्ट वैन डेन बर्ग

जवाबों:


5

मैंने दो स्पष्टीकरण (एक ही चीज़ के) के रूप में पाया है कि क्यों kswapd0 OOM- किलर की प्रक्रिया को मारने से पहले लगातार डिस्क रीडिंग अच्छी तरह से होता है:

  1. इस Askubuntu SE उत्तर का उत्तर और टिप्पणी देखें
  2. यूनिक्स एसई पर इस उत्तर के उत्तर और डेविड श्वार्ट्ज की टिप्पणियों को देखें

मैं यहाँ टिप्पणी 1 से उद्धृत करूँगा। जिसने वास्तव में मेरी आँखें खोलीं कि मैं क्यों लगातार डिस्क पढ़ रहा था जबकि सब कुछ जमी हुई थी :

उदाहरण के लिए, एक मामले पर विचार करें जहां आपके पास शून्य स्वैप है और सिस्टम लगभग रैम से बाहर चल रहा है। कर्नेल मेमोरी को उदाहरण के लिए फ़ायरफ़ॉक्स (यह ऐसा कर सकता है क्योंकि फ़ायरफ़ॉक्स निष्पादन योग्य कोड चला रहा है जो डिस्क से लोड किया गया है - कोड को डिस्क से फिर से लोड किया जा सकता है यदि आवश्यक हो)। अगर फ़ायरफ़ॉक्स को फिर से उस रैम को फिर से एन सेकेंड्स तक पहुँचाने की आवश्यकता होती है, तो सीपीयू "हार्ड फॉल्ट" उत्पन्न करता है, जो लिनक्स को कुछ रैम से मुक्त करने के लिए मजबूर करता है (जैसे किसी अन्य प्रक्रिया से कुछ रैम लेना), डिस्क से गायब डेटा को लोड करना और फिर फ़ायरफ़ॉक्स को जारी रखने की अनुमति देना हमेशा की तरह। यह सामान्य स्वैपिंग के समान है और kswapd0 यह करता है। - मिकोको रैंटलैनेन 15 फरवरी को 13:08 बजे

अगर किसी के पास इस व्यवहार को अक्षम करने के तरीके के रूप में है (हो सकता है कि क्या विकल्पों के साथ कर्नेल recompile? ), कृपया मुझे जल्द से जल्द बताएं! बहुत सराहना की, धन्यवाद!

अद्यतन: मैंने अभी तक जो एकमात्र तरीका पाया है वह कर्नेल को पैच करने के माध्यम से है, और यह मेरे लिए स्वैप अक्षम (यानी। CONFIG_SWAP is not set) के साथ काम करता है, लेकिन स्वैप के साथ दूसरों के लिए काम नहीं करता है ऐसा लगता हैइस प्रश्न के अंदर पैच देखें ।


कृपया वह पाठ निकालें जो मान्य नहीं है। पाठ में "EDIT" के साथ संपादन न करें। वे संशोधन इतिहास से स्पष्ट हैं ।
Kusalananda

1
@ कुसलानंद इस उपयोगकर्ता को प्रोत्साहित किया जाना चाहिए क्योंकि वह शायद वह है जिसने सबसे अधिक योगदान दिया है।
M89

@ कुसलानंद ने मुझे लगा कि उन्हें रखना महत्वपूर्ण है ताकि दूसरे देख सकें कि क्या (और) कोशिश की गई थी और काम नहीं किया। शायद UPDATEइसके बजाय EDITबेहतर होता?

@MarcusLinsner नहीं, क्षमा करें, आपने गलत समझा है। जब आपने कोई प्रश्न पूछा है तो वह दिखा रहा है कि आपने क्या किया है । इस सवाल का जवाब सवाल के लिए सही होना चाहिए के रूप में यह वर्तमान में उत्पन्न कर रहा है। मेरा मतलब है, एक संपादन भी पिछले संपादन को अनदेखा करने के लिए पाठक से पूछता है । यदि कोई संपादन इतिहास देखने में रुचि रखता है, तो आप इसे यहाँ देख सकते हैं
Kusalananda

0

memory.minमें पैरामीटर cgroups-v2स्मृति नियंत्रक की मदद करनी चाहिए।

अर्थात्, मुझे बोली:

हार्ड मेमोरी प्रोटेक्शन। यदि cgroup की मेमोरी का उपयोग इसकी प्रभावी न्यूनतम सीमा के भीतर होता है, तो cgroup की मेमोरी को किसी भी स्थिति में पुनः प्राप्त नहीं किया जाएगा। यदि कोई अप्राप्य पुनः प्राप्त करने योग्य स्मृति उपलब्ध नहीं है, तो OOM हत्यारा है।

स्रोत: https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html


क्या आप कृपया विस्तार से बता सकते हैं? ओपी प्रश्न का उत्तर देने में आपका उत्तर थोड़ा छोटा है।
विरोधाभास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.