OS X कर्नेल_टैस्क और वायर्ड मेमोरी उपयोग के गुब्बारे का निदान कैसे करें?


18

मेरे पास एक बहुत ही अजीब मुद्दा है, जो मुझे मूल कारण के रूप में निदान करने में एक कठिन समय है।

मेरे पास 14 जीबी रैम के साथ मैक प्रो (2008, 8-कोर 2.8 GHz, 8800GT) है (हाल ही में इस मुद्दे को अपग्रेड किया गया है!)।

जब मैं अपने सिस्टम को बूट करता हूं और लॉग इन करता हूं, vm_stat / top / Activity Monitor यह दिखाएगा कि kernel_task में लगभग 150 एमबी आवंटित है, और मशीन में लगभग 800 एमबी वायर्ड मेमोरी आवंटित की जा रही है।

यहां तक ​​कि शुरू में, 800 एमबी में वायर्ड मेमोरी का एक बहुत बड़ा हिस्सा लगता है जिसे बिना किसी एप्लिकेशन के साथ आवंटित किया जाना चाहिए - लेकिन, यह खराब हो जाता है। (एनबी: वायर्ड लॉक किया गया है, बिना मेमोरी के)

बहुत कम समय के बाद, कभी-कभी एक टर्मिनल को लॉन्च करने के रूप में कुछ के द्वारा ट्रिगर किया गया, कर्नेल_टैक 8-900 एमबी के रियल मेम (RSIZE) को गुब्बारा देगा, और वायर्ड मेमोरी 1.6 जीबी तक बढ़ जाएगी (यह मानते हुए कि सभी अतिरिक्त मेमोरी अनुरोध के लिए हैं कर्नेल में वायर्ड रैम)।

अगर मैंने सबकुछ छोड़ दिया (IE: कोई चल रहे एप्लिकेशन, किसी गतिविधि मॉनिटर या टर्मिनल को शीर्ष पर देखने के लिए), तो कर्नेल_टस्क RSIZE, या वायर्ड मेमोरी उपयोग में कोई सराहनीय कमी नहीं है। विपरीत तरीके से जाना, और सिस्टम को कार्यों के साथ लोड करना भी दिखाता है कि वायर्ड मेमोरी कम नहीं होती है - और यह महत्वपूर्ण रूप से भारी स्वैपिंग के लिए प्राथमिकता में कम नहीं है।

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

मैं किसी भी निराला kext s नहीं चला रहा हूँ - और futhermore, kextstat वहाँ कोई विशाल स्मृति आवंटन नहीं दिखाता है; लगभग 4 एमबी मेमोरी में सबसे बड़ा com.apple.nvidia.nv50hal।

जब ऐसा हुआ है, तो मशीन समग्र रूप से अधिक सुस्त महसूस करती है - बिना किसी कारण के क्योंकि रैम की इतनी बड़ी मात्रा को नॉन-पैजेबल के रूप में चिह्नित किया गया है।

तो मुझे कुछ सवाल पूछने हैं:

1) क्या यह पता लगाने का एक अच्छा तरीका है कि इस वायर्ड मेमोरी को क्या आवंटित किया गया है? यह अक्सर 2 से अधिक बार कर्नेल_टैस्क आकार का होता है, बिना कोई एप्लिकेशन चलाए। वास्तविक मेमोरी कुल जोड़ नहीं है - ऐसा लगता है कि रैम का एक गुच्छा है जो कहीं भी हिसाब नहीं किया जा रहा है।

2) क्या कारण है कि कर्नेल को अचानक 6 गुना अधिक मेमोरी की आवश्यकता होती है?


1
संभवतः इस कोड से संबंधित हैं।
Googlep

जवाबों:


5

यह जांचने के लिए कि कर्नेल सामान्य से अधिक मेमोरी का उपयोग क्यों करता है, आप विभिन्न उपकरणों का उपयोग कर सकते हैं।

  1. गतिविधि मॉनिटर को यह जांचने के लिए चलाएं कि कौन सी मेमोरी का उपयोग करने की प्रक्रिया है, इसलिए यह या तो एक है kernel_task, सामान्य से अधिक मेमोरी का उपयोग करने वाला कोई अन्य कार्य नहीं है (फिर हत्या पर विचार करें)।
  2. vm_stat 1रीयल-टाइम मेमोरी आँकड़ों को देखने के लिए टर्मिनल में रन करें और यदि आपकी मेमोरी वास्तव में हर सेकंड बढ़ रही है।
  3. fs_usageसिस्टम-कॉल और पृष्ठ दोषों को वास्तविक समय में मॉनिटर करने के लिए (रूट के रूप में) उपकरण चलाएँ ।
  4. टर्मिनल में चलने वाली कई प्रक्रियाओं के गंदे / बेनामी आवंटन की राशि की जाँच करने के लिए:

    sudo footprint -all -categories -swapped -collapseSharing
    

    यह मेमोरी जानकारी को इकट्ठा करेगा जैसे कि इसे कितना स्वैप किया गया था (प्रति उपयोगकर्ता या कर्नेल मेमोरी)।

  5. इसके अलावा, अगर आपको लगता है कि यह कर्नेल है जो अधिकांश मेमोरी का उपयोग कर रहा है, तो zprintटूल आज़माएं :

    sudo zprint -t -s | head -n20
    

    यह कर्नेल ज़ोन के बारे में जानकारी दिखाएगा

यदि आप डिस्क कैश को शुद्ध करने के लिए मजबूर करना चाहते हैं (कुछ मेमोरी को खाली करने के लिए), तो आप कोशिश कर सकते हैं:

sync && sudo purge

यह भी देखें: उच्च कर्नेल कार्य मेमोरी उपयोग की जांच कैसे करें? AD SE पर


3

कर्नेल एक्सटेंशन केवल कई, कई, कई कोड अंशों में से एक हैं, जिन्हें आपके ज्ञान के बिना ऑपरेटिंग सिस्टम द्वारा निष्पादित किया जा सकता है। मेरे पास परामर्शदाता की कैनरी नामक एक छोटी पायथन आधारित उपयोगिता है जो आपको उनमें से कुछ को खोजने में मदद करेगी:

यदि वह किसी भी संभावित अपराधी को नहीं बदलता है, तो मैं एक साफ स्थापना से बूट करूंगा और देखूंगा कि क्या आप वहां समस्या को पुन: उत्पन्न कर सकते हैं।

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