2010-05-02 21 views
5

मेरे पास एक लिनक्स डिमन है जो कुछ बच्चों को फोर्क करता है और उन्हें क्रैश के लिए मॉनीटर करता है (आवश्यकतानुसार पुनरारंभ करना)। यह अच्छा होगा अगर माता-पिता बाल प्रक्रियाओं के स्मृति उपयोग की निगरानी कर सकें - मेमोरी लीक का पता लगाने के लिए और एक निश्चित आकार से आगे जाने पर बाल प्रक्रियाओं को पुनरारंभ करें। मैं यह कैसे कर सकता हूं?बाल प्रक्रिया के स्मृति उपयोग की निगरानी

उत्तर

4

आप/proc/{पीआईडी}/स्थिति से बाहर विस्तृत स्मृति में जानकारी प्राप्त करने में सक्षम होना चाहिए:

Name: bash 
State: S (sleeping) 
Tgid: 6053 
Pid: 6053 
PPid: 6050 
TracerPid: 0 
Uid: 1007 1007 1007 1007 
Gid: 1007 1007 1007 1007 
FDSize: 256 
Groups: 1007 
VmPeak: 48076 kB 
VmSize: 48044 kB 
VmLck:   0 kB 
VmHWM:  4932 kB 
VmRSS:  2812 kB 
VmData:  2232 kB 
VmStk:  84 kB 
VmExe:  832 kB 
VmLib:  6468 kB 
VmPTE:  108 kB 
Threads: 1 
SigQ: 0/8190 
SigPnd: 0000000000000000 
ShdPnd: 0000000000000000 
SigBlk: 0000000000000000 
SigIgn: 0000000000001010 
SigCgt: 0000000188020001 
CapInh: 0000000000000000 
CapPrm: 0000000000000000 
CapEff: 0000000000000000 
Cpus_allowed: 0f 
Mems_allowed: 00000000,00000001 
voluntary_ctxt_switches: 69227121 
nonvoluntary_ctxt_switches: 19071 

तथापि, जब तक मेमोरी लीक नाटकीय हैं, यह मुश्किल के लिए उन्हें पता लगाने के लिए प्रक्रिया आंकड़े देखते समय है, क्योंकि मॉलोक और फ्री आमतौर पर सिस्टम कॉल (ब्रैक/एसआरबीके) से काफी अमूर्त होते हैं जिनके साथ वे मेल खाते हैं।

आप/proc/$ {PID}/statm में भी चेक कर सकते हैं।

+0

ऐसा करने के लिए कोई सिस्टम कॉल नहीं है? पार्सिंग फाइलें जानकारी प्राप्त करने के लिए एक बहुत गंदे तरीके की तरह लगती हैं। –

+1

इस प्रकार पीएस और दोस्तों को उनकी जानकारी मिलती है ... – WhirlWind

+0

तो मुझे लगता है कि यह सबसे अच्छा तरीका है। धन्यवाद! –

1

आप अपनी प्रक्रिया के साथ समानांतर में एक मॉनिटर स्क्रिप्ट चलाना vmstat रखने का प्रयास कर सकते हैं (ध्यान दें कि यह एक अच्छा विचार नहीं है कि आप इस स्क्रिप्ट को कई बार चला रहे हैं क्योंकि आपको एकाधिक vmstat प्रतियां मिलेंगी)। फिर यह मॉनीटर स्क्रिप्ट ओएस के उपलब्ध स्मृति की मात्रा प्राप्त करने के लिए मुफ्त मेमोरी प्लस बफर और कैश आकार ले सकती है और आप इसे ट्रैक कर सकते हैं। फिर यदि वह कुछ सीमा से नीचे हो जाता है तो आप ps -e -o को कॉल करके सबसे बड़ी प्रक्रियाओं की जांच कर सकते हैं ... (विवरण के लिए मैन पेज देखें लेकिन बनाम, पीसीपीयू, उपयोगकर्ता, पिड, एक शुरुआती बिंदु के रूप में तर्क दें)।

मैं इस मॉनीटर को एक अलग प्रक्रिया के रूप में चलाने की सलाह दूंगा और जब यह बहुत बड़ा हो जाता है तो यह नकली प्रक्रिया को मार देगा। आप

-u user-name 

पीएस के पैरामीटर का उपयोग कर निगरानी की प्रक्रियाओं के सेट को प्रतिबंधित कर सकते हैं।

यह सब एक हैक (यूके अर्थ) हालांकि - सही समाधान हालांकि लीक को ठीक करना है, मान लीजिए कि आपके पास कोड है।

+0

मैं एक एकीकृत समाधान पसंद करता हूं जो बाहरी कार्यक्रमों/स्क्रिप्ट पर भरोसा नहीं करता है। मेमोरी लीक को ठीक करने के लिए सही काम है, लेकिन असली दुनिया में आपको कभी-कभी अस्थायी रूप से समझौता करना पड़ता है। साथ ही, जब आप बाहरी नियंत्रण चलाते हैं तो मैं मामलों की कल्पना कर सकता हूं जो आपके नियंत्रण में नहीं है (लगता है कि apache एक php स्क्रिप्ट चला रहा है)। –

+0

एक एकल, एकीकृत समाधान के साथ समस्या यह है कि यह तेजी से जटिल हो जाता है। अलग-अलग कार्यों को करने के लिए अलग-अलग कार्यक्रम होने का लाभ यह है कि प्रत्येक अलग-अलग अपेक्षाकृत सरल और डीबग और तैनाती में आसान है। एक एकीकृत समाधान पहले अच्छा लगता है (संचार के साथ कोई समस्या नहीं, आपको पता है कि यह चल रहा है 'मुख्य कार्यक्रम चल रहा है आदि) लेकिन जैसे ही आपका सिस्टम बड़ा हो जाता है सादगी समस्या अधिक से अधिक महत्वपूर्ण हो जाएगी – Nick

संबंधित मुद्दे