मुफ्त रैम गायब हो जाता है - मेमोरी लीक?


11

एक नई शुरुआत प्रणाली में, free1.5G इस्तेमाल की गई रैम (8G RAM पूरी तरह से, Ubuntu 12.04 के साथ lightdm और प्लाज्मा डेस्कटॉप, एक कोनसोल विंडो शुरू हुई) के बारे में रिपोर्ट दी गई है। मेरे द्वारा उपयोग किए जा रहे एप्लिकेशन होने के बाद भी यह 2G से अधिक नहीं खपत करता है। हालाँकि, कुछ दिनों के लिए सिस्टम के चलने से मेरी अधिक रैम मुक्त हो जाती है - उपयोग किए गए ऐप्स की सूची में दिखाए बिना: smem --pie=name20% से कम उपयोग किए जाने की रिपोर्ट (और 80% उपलब्ध होने पर), बाकी सब कुछ कहता है अलग ढंग से। free -mउदाहरण के लिए दिन के बारे में रिपोर्ट 7:

             total       used       free     shared    buffers     cached
Mem:          7459       7013        446          0        178        997
-/+ buffers/cache:       5836       1623
Swap:         9536        296       9240

(इसलिए आप देख सकते हैं, यह बफ़र्स या कैश नहीं है)। आज यह अंत में सिस्टम पूरी तरह से दुर्घटनाग्रस्त हो गया: विंडोज़ मैनेजर चला गया, ऐप "हवा में लटका हुआ" (फ्रेमलेस) - और एक पॉपअप "बहुत सारी खुली फाइलों" के बारे में मुझे सूचित कर रहा है। Syslog रिपोर्ट:

kernel: [856738.020829] VFS: file-max limit 752838 reached

इसलिए मैंने उन एप्लिकेशन को बंद कर दिया जिन्हें मैं बंद करने में सक्षम था, और Ctrl-Alt-backspace का उपयोग करके एक्स को मार दिया। X ने इसके बाद फिर से आने की कोशिश की, लेकिन असफल कैफे से, लेकिन ऐसा करने में असमर्थ था क्योंकि यह अब इसके कॉन्फ़िगरेशन का पता नहीं लगा सकता था। इसलिए मैंने Ctrl-Alt-F2 का उपयोग करके एक कंसोल पर स्विच किया, मैंने (vmstat, free, smem proc/meminfo,, lsof, ps aux), और अंत में रिबूट की जाने वाली सभी जानकारी पर कब्जा कर लिया । एक्स फिर से असफल कैफे के साथ आया; इस बार मैंने इसे "मेरे बैक-अप कॉन्फ़िगरेशन से उबरने" के लिए कहा, फिर एक कंसोल पर स्विच किया और startxग्राफिकल वातावरण को लाने के लिए सफलतापूर्वक उपयोग किया ।

मुझे इस बात का कोई वास्तविक सुराग नहीं है कि इस समस्या का कारण क्या है - हालाँकि इसे या तो एक्स के साथ ही करना होगा, या एक्स पर चलने वाली कुछ उपयोगकर्ता प्रक्रियाओं के साथ - जैसे एक्स को मारने के बाद, free -mआउटपुट इस तरह दिखता है:

             total       used       free     shared    buffers     cached
Mem:          7459       2677       4781          0         62        419
-/+ buffers/cache:       2195       5263
Swap:         9536         59       9477

(~ 3.5 जीबी मुक्त किया जा रहा है) - एक नई शुरुआत के बाद आउटपुट के साथ तुलना करने के लिए:

             total       used       free     shared    buffers     cached
Mem:          7459       1483       5975          0         63        730
-/+ buffers/cache:        689       6769
Swap:         9536          0       9536

दो और सहायक आउटपुट द्वारा प्रदान किए जाते हैं memstat -u। दुर्घटना से कुछ समय पहले:

User     Count     Swap      USS      PSS      RSS
mail         1        0      200      207      616
whoopsie     1      764      740      817     2300
colord       1     3200      836      894     2156
root        62    70404   352996   382260   569920
izzy        80   177508  1465416  1519266  1851840

X को मारने के बाद:

User     Count     Swap      USS      PSS      RSS
mail         1        0      184      188      356
izzy         1     1400      708      739     1080
whoopsie     1      848      668      826     1772
colord       1     3204      804      888     1728
root        62    54876   131708   149950   267860

और पुनः आरंभ करने के बाद, वापस X में:

User     Count     Swap      USS      PSS      RSS
mail         1        0      212      217      628
whoopsie     1        0     1536     1880     5096
colord       1        0     3740     4217     7936
root        54        0   148668   180911   345132
izzy        47        0   370928   437562   915056

एक सप्ताह के लिए फाइल सिस्टम उपयोग एक सप्ताह के लिए कर्नेल / सीपीयू उपयोग

संपादित करें: मेरी निगरानी प्रणाली से बस दो रेखांकन जोड़े। देखने के लिए दिलचस्प है: हर बार जब मेमोरी की खपत में "कूद" होता है, तो सीपीयू भी चोटियों पर पहुंच जाता है। अभी यह सही पाया गया है - और यह मुझे X को इंगित करने वाले एक अन्य संकेतक की याद दिलाता है: अक्सर जब मेरी मशीन पर लौटते हैं और स्क्रीन को अनलॉक करते हैं, तो मुझे अपने सीपीयू पर भारी काम करते हुए पाया। के साथ जाँच top, यह हमेशा निकला /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none

तो इस लंबे स्पष्टीकरण के बाद, आखिरकार मेरे सवाल:

  1. संभावित कारण क्या हो सकते हैं?
  2. मैं शामिल प्रक्रियाओं / अनुप्रयोगों की बेहतर पहचान कैसे कर सकता हूं?
  3. इस व्यवहार से बचने के लिए क्या कदम उठाए जा सकते हैं - मशीन को सभी एक्स दिनों में रिबूट करने से कम?

मैं अपनी पुरानी मशीन पर लगभग ५ साल से on.०४ (हार्डी) चला रहा था, ऐसा कभी अनुभव नहीं किया (हमेशा १०० दिन से अधिक समय तक, जैसे कर्नेल अपडेट के लिए रिबूट करने से पहले)। यह अब 12.04 की एक नई स्थापना के साथ एक पूरी नई मशीन है । मामले में यह मायने रखता है, कुछ चश्मा:

Radeon (tm) HD ग्राफिक्स के साथ AMD A4-3400 APU, ओपन-सोर्स ati / radeon ड्राइवर (इसलिए कोई fglrx इंस्टॉल नहीं), 8GB RAM, WDC WD1002FAEX-0 hdd (1BB), Asus F1A75-V Evo मेनबोर्ड का उपयोग कर। Ubuntu 12.04 64-बिट KDE4 / प्लाज्मा के साथ। एप्लिकेशन आमतौर पर अधिक या कम स्थायी रूप से खुलते हैं, जिसमें इवोल्यूशन, फ़ायरफ़ॉक्स, कोनोलास (मिडनाइट कमांडर के साथ अंदर, लगभग 4 टैब), और लिबरऑफिस शामिल हैं - और कभी-कभी कैलिबर, जिम्प और मनीप्लेक्स (बैंकिंग सॉफ़्टवेयर जो मैं पहले से ही लगभग 20 वर्षों से उपयोग कर रहा हूं) एक संस्करण में जिसने हार्डी पर अच्छा प्रदर्शन किया)।

संपादित करें: आज मुझे "बुरे लोगों" में से एक मिला: KDE4s प्लाज्मा-डेस्कटॉप। उपयोग की गई मेमोरी फिर से 5GB तक थी, जब मैंने ए killall plasma-desktop && plasma-desktop। यह 1.3 जीबी रैम से मुक्त हो गया! psकहते हैं:

                             RSS    SIZE   VSZ
plasma usage before restart  120988 526472 1300816
plasma usage after restart   92352  495972 1263632

तो वे 1.3GB कहां हैं? उन मूल्यों के बीच का अंतर, यदि जोड़ा गया है, तो 96MB तक राशि - 1.3GB नहीं।

और यह केवल एक हिस्सा हो सकता है, क्योंकि अभी भी 3.7GB उपयोग में है (2GB से कम होना चाहिए)। मैंने पिछले 6 दिनों के दौरान कई उपकरणों का उपयोग करके इसकी निगरानी की: मेमोरी का उपयोग किया (कैश और बफ़र्स के बारे में बात नहीं करना) धीरे-धीरे लेकिन लगातार बढ़ता है। भले ही मैं कुछ भी चलाने के लिए अपने डेस्क पर नहीं हूं ...

खुली फ़ाइलों के साथ प्रक्रियाओं की निगरानी के रूप में, मैं वर्तमान में शीर्ष 5 प्राप्त करने के लिए निम्नलिखित 1-लाइनर (आई लव शेल और विशेष रूप से बैश) का उपयोग करता हूं:

echo "$(for pid in $(ls -a /proc|egrep '^([0-9])*$'|sort -n 2>/dev/null); do \
if [ -e /proc/$pid/fd ]; then FHC=$(ls -l /proc/$pid/fd|wc -l); \
if [ $FHC -gt 0 ]; then PNAME="$(cat /proc/$pid/comm)"; \
echo "$FHC files opened by $pid ($PNAME)"; fi; fi; done)"|sort -r -n|head -n5

बेहतर पठनीयता के लिए 4 लाइनों में यहाँ कमांड करें। वहाँ से अभी तक कुछ भी नहीं - सिवाय इसके कि स्काइप को पसंद नहीं है कि इंटरनेट कनेक्शन टूट गया है। प्रत्येक डिस्कनेक्ट इसकी खुली फ़ाइलों की थोड़ी वृद्धि का कारण बनता है, लेकिन नाटकीय कुछ भी नहीं। दूसरी ओर ऐसा लगता है कि प्लाज्मा भी इसके लिए जिम्मेदार है:

VFS उपयोग (2 दिन)

अंत में फ़ाइल हैंडल की बूंद देखें? वह प्लाज्मा रीस्टार्ट था।


sudo bash -c 'sync; echo 3 > /proc/sys/vm/drop_caches'अतिरिक्त राम को साफ करता है ? आप प्रोग्रामों की खुली फाइलों का उपयोग करके देख सकते हैंlsof
सविता राड्विक जूल

इसके अलावा, क्या आपने डेस्कटॉप प्रबंधकों को बदलने की कोशिश की है? उदाहरण के लिए lxde (या lubuntu-desktop)? अंत में, क्या आप सुनिश्चित हैं कि डिस्क पर आउटपुट ठीक है? क्या आपने डिस्क का SMART डेटा और लाइव सीडी का उपयोग करके / से डिस्क पर फ़ाइलों की प्रतिलिपि बनाने की गति की जाँच की है?
सावस्व राड्विक

परीक्षण करने के लिए इस चेक, अगर आप एक रिसाव देखने के लिए कैसे एक स्मृति रिसाव का पता लगाने के
मिच

@medigeek: जैसा कि मैंने बताया, कैश और बफ़र्स मुद्दा नहीं हैं। का आउटपुट देखें free। एक अलग डे पर स्विच करना मुझे वास्तव में माना जाता है; यदि KDE3.5 उपलब्ध था, तो मैं प्लाज्मा के साथ समाप्त नहीं हुआ था। यह केवल देखने के लिए अस्थायी हो सकता है कि क्या प्लाज्मा शामिल है।
इज़्ज़ल

@ मिच: मुझे समझ में आया कि एक प्रक्रिया के खिलाफ मेम्प्रिफ़ का इस्तेमाल किया जाना था (जिसे मैंने अभी तक अलग नहीं किया है)। यकीन है कि यह प्रणाली चौड़ा इस्तेमाल किया जा सकता है? इसके अलावा, जैसा कि "बहुत सारी खुली हुई फाइलें" त्रुटि बताती है, मेरे लिए ऐसा लगता है कि कुछ प्रक्रिया बहुत सारे फ़ाइल हैंडल खोल रही है, उन्हें कभी भी जारी नहीं करना चाहिए। यकीन नहीं होता कि यादगार के द्वारा पकड़ा जाएगा। मैंने अब खुली फाइलों द्वारा शीर्ष -5 प्रक्रियाओं को पकड़ने के लिए एक स्क्रिप्ट की स्थापना की - उम्मीद है कि यह बुराई को बदल देगा।
इज़्ज़ल

जवाबों:


6
  1. खुली फ़ाइलों की बड़ी संख्या एक अच्छा सुराग है कि कुछ गलत हो रहा है। मेरा अनुमान कुछ केडीई प्रणाली डेमॉन होगा।

  2. एक कंसोल खोलें और "शीर्ष" चलाएं। फिर छांटना कॉलम को VIRT या RES में बदलने के लिए <और> का उपयोग करें और देखें कि कौन से प्रोग्राम सबसे अधिक मेमोरी का उपयोग कर रहे हैं। एक मेमोरी लीक एक बड़े पैमाने पर फुलाया आभासी स्मृति उपयोग के रूप में दिखाई देगा, क्योंकि एक बार लीक की गई मेमोरी को पॉइंटर खो जाने पर इसका उपयोग नहीं किया जाएगा और इसे स्वैप किया जाएगा। इसके अलावा "lsof" चलाएं और बहुत सारी खुली फाइलों के साथ एक प्रक्रिया देखें, क्योंकि ऐसा लगता है कि यह वास्तव में एक फाइल डिस्क्रिप्टर लीक है।

  3. कार्यक्रम को ट्रैक करें और बग की रिपोर्ट करें।


मैंने पहले ही इसके लिए शीर्ष / htop का उपयोग करने की कोशिश की। परेशानी यह है कि, यह रेजिडेंट मेमोरी के लिए कोई परिणाम नहीं दिखा (जैसा कि ऊपर वर्णित है, उपयोग की गई मेमोरी का केवल एक छोटा हिस्सा रनिंग ऐप से जुड़ा जा सकता है)। और VIRTual मेमोरी के लिए, यह व्याख्या करना कठिन है (स्टार्टअप के ठीक बाद भी, वर्चुअल मेमोरी ने यहां 3TB तक रकम का उपयोग किया है - एक आकार यहां तक ​​कि मेरा हार्डड्राइव भी नहीं संभाल सकता है)। इसलिए वर्तमान में उदाहरण के लिए, एवोल्यूशन 1.9GB VIRT का उपयोग करता है, शीर्ष के अनुसार, जबकि उपयोग में समग्र मेमोरी 1.2GB (कैश और बफ़र्स को छोड़कर) तक रहती है। और हां, मेरा पहला इरादा कार्यक्रम को ट्रैक करना है, इसलिए मैं बग दर्ज कर सकता हूं ...
इज़्ज़

बस मेरी निगरानी प्रणाली से 2 imgs जोड़ा गया। ऐसा लगता है कि "जंप" हमेशा दिन के एक ही समय पर हुआ (1 अपवाद हालांकि)। दुर्भाग्य से imgs क्रोन के साथ जांच करने के लिए कोई टाइमस्टैम्प नहीं देता है। Btw: इस प्रक्रिया की निगरानी करने का कोई तरीका है कि कितनी फाइलें खुली हैं?
इज़्ज़ी

1
आपका अनुमान अच्छा था। हालांकि डेमॉन नहीं, यह मुख्य रूप से केडीई घटक था: प्लाज्मा-डेस्कटॉप (ऊपर देखें)। इसके बारे में मजेदार बात: मैंने अभी पता लगाया, और इसे यहां पोस्ट किया - और मेरे दैनिक पर 10 मिनट बाद apt-get update && apt-get upgradeप्लाज्मा-डेस्कटॉप के लिए एक अपडेट था; वे लोग तेज़ हैं X) अब मैं यह देखने के लिए कुछ समय के लिए देखता हूं कि क्या समस्या हल हो गई है, इससे पहले कि मैं इस तरह की घोषणा करूं। अब तक, चीजें काफी आशाजनक दिखती हैं।
इज़्ज़ी

अभी भी स्थिर लग रहा है। हालांकि न तो lsofहै और न ही top"बुराई प्रक्रिया" के लिए मुझे इशारा किया, अपने अनुमान केडीई डेमॉन के विषय में उपद्रवी की दिशा में मुझे इशारा किया। तो फिर से आपको धन्यवाद - मेरी मशीन का अपटाइम अब लगभग 14d है, और सब कुछ अभी भी स्थिर लग रहा है, हालांकि मैंने समानांतर में वर्चुअलबॉक्स, संकलन आदि जैसी चीजों को भी चलाया। इसलिए मैं इसे हल करता हूं, और निकटतम मैच को चिह्नित करता हूं :)
इज़्ज़ी

0

मुझे लगता है कि सामान्य सिस्टम व्यवहारकर्ता है। सबसे अधिक संभावना है कि सब कुछ ठीक है।

आप यह समझने के लिए यह शानदार पेपर (linux my ram खा गए) पढ़ सकते हैं कि linux आपके ram को कैसे प्रबंधित कर रहा है और इसके लिए कोई चिंता क्यों नहीं है:

http://www.linuxatemyram.com/


4
ओह - मैंने कभी नहीं सुना कि यह "सामान्य सिस्टम व्यवहार" है यदि सिस्टम 7 दिनों के बाद "बहुत सारी खुली फाइलों" त्रुटि के साथ क्रैश हो जाता है। मैं अब लगभग 15 वर्षों से लिनक्स चला रहा हूं, ऐसा कभी नहीं हुआ था। और हाँ, मैं पूरी तरह से समझता हूं कि लिनक्स "फ्री रैम" का उपयोग कैसे करता है (कैशिंग आदि के लिए इसका उपयोग करना) जैसा कि ऊपर बताया गया है: कैश और बफ़र्स यहां मुद्दा नहीं हैं। मैं अच्छे कारणों के लिए इस्तेमाल की जा रही रैम के बारे में बात नहीं कर रहा हूं - लिनक्स स्वैपिंग की कीमत के लिए कैश से कभी नहीं चिपकेगा।
इज़्ज़ल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.