18

चेक करने के लिए परफमन काउंटर मेरी सेवा में मेमोरी रिसाव समस्या को देखना चाहते हैं। मैंने पेर्फॉन काउंटर के सेट का पालन करने की कोशिश की है।मेमोरी लीक

  1. .NET CLR मेमोरी \ # बाइट्स में सभी ढेर
  2. .NET CLR मेमोरी \ जनरल 2 ढेर आकार
  3. .NET CLR मेमोरी \ # जीसी पिन किया की संभालती
  4. .NET CLR मेमोरी \ # ऑब्जेक्ट्स
  5. .NET CLR मेमोरी \ # कुल प्रतिबद्ध बाइट्स
  6. .NET CLR मेमोरी \ # कुल आरक्षित बाइट्स
  7. .NET CLR मेमोरी \ बड़े वस्तु ढेर आकार

मैं here

से सेट ऊपर कहा जाता है इसके अलावा सेट निम्नलिखित के लिए भेजा:

  1. मेमोरी/उपलब्ध बाइट्स
  2. मेमोरी/प्रतिबद्ध बाइट्स
  3. प्रक्रिया/निजी बाइट्स
  4. प्रक्रिया/पृष्ठ फ़ाइल बाइट्स
  5. प्रक्रिया/हैंडल गणना

मैं से here

सेट ऊपर कहा जाता है वहाँ किसी भी पैरामीटर/मापदंड या किसी अन्य का सबसे अच्छा तरीका स्मृति रिसाव के लिए परफ़ॉर्मेंस काउंटर पहचान करने के लिए है?
क्या कोई मुझे स्मृति रिसाव की जांच करने के लिए काउंटरों का सेट सुझा सकता है? या उपरोक्त सेट मेमोरी रिसाव को कवर करता है?

+0

यहाँ एक अच्छा लेख http://www.codeproject.com/Articles/42721/Best-Practices-No-Detecting-NET-application-memo – CharithJ

उत्तर

26

प्रदर्शन मॉनिटर का उपयोग कर एक स्मृति रिसाव का पता लगाने, इन काउंटरों पर नजर रखने के लिए:

  1. मेमोरी/उपलब्ध बाइट काउंटर आप उपलब्ध स्मृति की बाइट की कुल संख्या देख सकते हैं। यह मान आम तौर पर उतार-चढ़ाव करता है, लेकिन यदि आपके पास मेमोरी लीक के साथ एक एप्लिकेशन है, तो यह समय से कम हो जाएगा।
  2. मेमोरी/प्रतिबद्ध बाइट काउंटर मेमोरी रिसाव होने पर लगातार बढ़ेगा, क्योंकि मेमोरी कम उपलब्ध बाइट्स की संख्या कम हो जाती है, प्रतिबद्ध बाइट्स की संख्या बढ़ जाती है।
  3. प्रक्रिया/निजी बाइट काउंटर विशिष्ट प्रक्रिया के लिए विशेष रूप से आरक्षित बाइट्स की संख्या प्रदर्शित करता है। यदि मेमोरी लीक होता है, तो यह मान लगातार बढ़ता जायेगा।
  4. प्रक्रिया/पृष्ठ फ़ाइल बाइट काउंटर पेजफाइल के आकार को प्रदर्शित करता है। मशीन की भौतिक मेमोरी को पूरक करने के लिए विंडोज वर्चुअल मेमोरी (पेजफाइल) का उपयोग करता है। चूंकि मशीन की भौतिक मेमोरी से शुरू होती है, तो मेमोरी के पेज पेजफाइल पर ले जाया जाता है। के लिए यह सामान्य है कि पेजफाइल का उपयोग बहुत सारी मेमोरी वाली मशीनों पर भी किया जा सके। लेकिन यदि पेजफाइल का आकार लगातार बढ़ता है, तो यह एक अच्छा संकेत है स्मृति रिसाव हो रहा है।
  5. मैं प्रक्रिया/हैंडल काउंटर काउंटर का भी उल्लेख करना चाहता हूं। एप्लिकेशन संसाधनों की पहचान करने के लिए हैंडल का उपयोग करते हैं जिन्हें उन्हें एक्सेस होना चाहिए।यदि एक स्मृति रिसाव हो रहा है, तो एक अनुप्रयोग अक्सर मेमोरी संसाधनों की पहचान के लिए अतिरिक्त हैंडल बनाएगा। तो में वृद्धि में हैंडल गिनती मेमोरी लीक इंगित कर सकती है। हालांकि, सभी मेमोरी लीक के परिणामस्वरूप हैंडल गिनती में वृद्धि नहीं होगी।

Source

मेरे अनुभव में यह सही है।

मैं आपको एक माइक्रोसॉफ्ट कर्मचारी टेस द्वारा इस माइक्रोसॉफ्ट एडवांस्ड डिबगिंग ब्लॉग पर भी संदर्भित करता हूं। निम्नलिखित काउंटर का सुझाव कौन देता है। मैंने उपर्युक्त पाया है कि मेमोरी रिसाव मौजूद है, लेकिन मुझे विश्वास है कि टेस के निर्देश इस मुद्दे में और अधिक अंतर्दृष्टि प्रदान कर सकते हैं।

Debugging Demos - Memory Review

  • .NET CLR मेमोरी/में सभी ढेर
  • .NET CLR मेमोरी/बड़े वस्तु ढेर आकार # बाइट्स
  • .NET CLR मेमोरी/जनरल 2 ढेर आकार
  • नेट CLR मेमोरी/जनरल 1 ढेर आकार
  • .NET CLR मेमोरी/जनरल 0 ढेर आकार
  • प्रक्रिया/निजी बाइट्स
  • प्रक्रिया/वर्चुअल बाइट्स
+0

कुछ प्रक्रियाओं निजी बाइट्स और जांच की जा रही है पेज फ़ाइल बाइट्स, वे बिल्कुल वही हैं (भले ही कई जीबी मुक्त भौतिक स्मृति हैं)। क्या इसका वास्तव में मतलब है कि पूरी प्रक्रिया 'स्मृति भौतिक स्मृति के बजाय पेजफाइल से आती है, या पेज फ़ाइल बाइट्स का अर्थ अधिक प्रचलित है? – stijn

3

बेहतर उपकरण स्मृति आसान जैसे RedGate ANTS Memory Profiler और JetBrains dotMemory Profiler परीक्षण लीक बनाने के लिए उपलब्ध हैं।

हालांकि यदि आप प्रदर्शन काउंटर का उपयोग करना चाहते हैं, this article मेमोरी लीक का परीक्षण करने के लिए प्रदर्शन काउंटर का उपयोग कैसे करें।

ध्यान रखें कि कचरा संग्रह कुछ उदाहरण निपटाने के तुरंत बाद स्मृति जारी नहीं करता है। इसे मेमोरी तनाव होने पर ही स्मृति को ट्रिगर और रिलीज़ करने के लिए अनुकूलित किया गया है। इसलिए, यदि आप मेमोरी लीक के लिए परीक्षण करना चाहते हैं तो आपको काउंटर रीडिंग लेने से पहले कचरा संग्रह को मैन्युअल रूप से निष्पादित करना चाहिए।

GC.Collect(); 
GC.WaitForPendingFinalizers(); 

enter image description here