वर्षों से, मेरे ऑपरेटिंग सिस्टम का 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
min_free_kbytes
प्रासंगिक नहीं है, यह कैश्ड पृष्ठों के लिए आरक्षित नहीं है। AFAICT vm sysctls में से कोई भी विशेष रूप से कैश किए गए पृष्ठों के लिए किसी भी मेमोरी को संग्रहीत करने की अनुमति नहीं देता है, अर्थात MAP_ANONYMOUS आवंटन सीमित करता है :(।