में सक्रिय रूप से उपयोग की जाने वाली मेमोरी को ट्रैक करना मैं ट्रैक करना चाहता हूं कि विशिष्ट राज्यों में विभिन्न प्रोग्राम कितनी मेमोरी स्पर्श करते हैं। उदाहरण के लिए, कहें कि मेरे पास एक ग्राफिकल प्रोग्राम है। यह कम से कम कम स्मृति का उपयोग कर सकता है जब यह कम हो जाता है, क्योंकि यह खिड़की को फिर से नहीं हटाएगा, जिसके लिए छवियों और फोंट पढ़ने और बड़ी संख्या में पुस्तकालय कार्यों को निष्पादित करने की आवश्यकता होती है। ये वस्तुएं स्मृति में अभी भी पहुंच योग्य हैं, लेकिन इनका उपयोग वास्तव में नहीं किया जा रहा है।लिनक्स प्रोग्राम
उपकरण top
की तरह सीमित उपयोग की हैं, क्योंकि वे सिर्फ बताओ कि कितना स्मृति एक कार्यक्रम की पता अंतरिक्ष में मैप किया गया है, और इसके बारे में कितना शारीरिक रैम का निवासी हो। इसी तरह, रिसाव डिटेक्टर केवल तभी बताएंगे जब स्मृति पहुंच योग्य नहीं है, अगर नहीं तो इसका उपयोग नहीं किया जा रहा है।
क्या कोई मौजूदा उपकरण है जो इस तरह से सक्रिय रूप से उपयोग/अप्रयुक्त स्मृति को ट्रैक कर सकता है? यदि संभव हो, तो मैं न केवल ढेर पर बल्कि ट्रैक संग्रहण कार्यक्रम/लाइब्रेरी कोड में भी ट्रैक ट्रैक करना चाहता हूं।
संपादित करें: मैं स्पष्ट करना चाहते हैं: मैं बहुत अधिक स्मृति एक कार्यक्रम वास्तव में, पढ़ता लिखते हैं, या एक निश्चित बिंदु के बाद निष्पादित करता है, जैसे कि, एक बार यह एक निश्चित अवस्था में पहुँचता है जानना चाहते हैं। जबकि पता स्थान में पृष्ठों की संख्या और निवासी पृष्ठों की संख्या महत्वपूर्ण माप हैं, यह वही नहीं है जो मैं ढूंढ रहा हूं।
मैं तीन तरीकों का पीछा कर रहा हूँ अभी:
- मैं एक पुस्तकालय है कि सभी स्मृति क्षेत्रों के संरक्षण बिट्स को साफ करता है/proc/self/नक्शे से पढ़ा (ढेर और अपने स्वयं के कोड को छोड़कर) में लिखा है 'mprotect` का उपयोग कर। इसमें एक सेगफॉल्ट हैंडलर है जो सुरक्षा बिट्स को पुनर्स्थापित करता है और काउंटर को बढ़ाता है। मैं इसे 'एलडी_PRELOAD` के साथ लोड करता हूं, और यह सिग्नल की प्राप्ति पर स्मृति पहुंच को ट्रैक करना शुरू करता है। इसने कुछ वास्तविक दोषों को प्रतीत होता है जो प्रतीत होता है कि वे फर्जी पतों (वे गलती के समय किसी भी रजिस्ट्रार या पास की मेमोरी में संग्रहीत नहीं हैं)।
- मैंने एक 'purge` प्रोग्राम लिखा है जो `mmap` का उपयोग करके स्मृति से आवंटित और पढ़ता है जब तक कि' mmap` त्रुटि देता है। यह उम्मीद है कि लक्षित प्रक्रिया से सभी पृष्ठों को मजबूर कर दिया जाएगा, जिन्हें 'शुद्ध' चल रहा है जबकि निलंबित कर दिया गया है। फिर मैं 'pidstat` का उपयोग करके लक्ष्य प्रक्रिया फिर से शुरू होने पर पेज-इन्स की संख्या गिनती हूं। ऐसा लगता है लेकिन यह एक बहुत ही बदमाश साधन है। यह पेजों को छुआ जाने के बारे में कोई जानकारी नहीं देता है।
- मुझे बताया गया है कि वालग्रिंड आपको प्लग-इन लिखने की अनुमति देता है जो कुछ घटनाओं पर कुछ क्रियाओं को निष्पादित करने का कारण बनता है, उदाहरण के लिए, स्मृति एक्सेस करता है। यह अब तक आशाजनक लग रहा है।
डुप्लिकेट: http://stackoverflow.com/questions/131303/linux-how-to-measure-actual मेमोरी-उपयोग के-एक-आवेदन या प्रक्रिया – lothar