मेमोरी का इस्तेमाल (बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी + स्वैप मेमोरी)

मेमोरी का इस्तेमाल (बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी और स्वैप मेमोरी), Android की ज़रूरी जानकारी वाली मेट्रिक है. इससे आपके ऐप्लिकेशन की मेमोरी के इस्तेमाल के बारे में पता चलता है.

बिना सोर्स फ़ाइल वाली मेमोरी, स्टोरेज पर मौजूद किसी फ़ाइल से जुड़ी नहीं होती. जैसे, हीप एलोकेशन और mmap-एलोकेट की गई मेमोरी. इससे आपके ऐप्लिकेशन के डाइनैमिक मेमोरी के बंटवारे को कैप्चर किया जाता है. इसमें Java या Kotlin हीप, अनमैनेज्ड नेटिव हीप के बंटवारे (जहां Android 8.0 (एपीआई लेवल 26) और इसके बाद के वर्शन पर बिटमैप पिक्सल डेटा मौजूद होता है) और थ्रेड एक्ज़ीक्यूशन स्टैक शामिल हैं. ओएस, फ़ाइल-बैक की गई मेमोरी को कम कर सकता है. हालांकि, वह ऐनॉनमस मेमोरी को कम नहीं कर सकता.

रेज़िडेंट सेट साइज़ (आरएसएस), किसी प्रोसेस के लिए इस्तेमाल किए गए मेमोरी पेजों की कुल संख्या होती है. इसमें शेयर किए गए और शेयर नहीं किए गए, दोनों तरह के पेज शामिल होते हैं. ये पेज, फ़िज़िकल रैम में सेव होते हैं. किसी पेज को "शेयर किया गया" तब माना जाता है, जब उसे एक से ज़्यादा प्रोसेस (जैसे कि एक ही लाइब्रेरी को ऐक्सेस करने वाले ऐप्लिकेशन) ऐक्सेस करती हैं.

बिना सोर्स फ़ाइल वाली मेमोरी के लिए, सिस्टम मेमोरी पर दबाव पड़ने पर पेजों को स्वैप स्पेस (या Android पर zRAM) में लिख सकता है. ज़रूरत पड़ने पर, सिस्टम इन पेजों को स्वैप से वापस पढ़ सकता है.

कुल मिलाकर, मेमोरी के इस्तेमाल (बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी + स्वैप मेमोरी) से पता चलता है कि आपके ऐप्लिकेशन के कुल कितने मेमोरी पेज, स्टोरेज में मौजूद किसी फ़ाइल से बैक अप नहीं लिए गए हैं. इसमें ऐसी मेमोरी भी शामिल है जिसे सिस्टम, स्वैप मेमोरी में भी सेव कर रहा है. बिना सोर्स फ़ाइल वाली आरएसएस और स्वैप मेमोरी को ट्रैक करने से, आपको अपने ऐप्लिकेशन की सही और न हटाई जा सकने वाली मेमोरी फ़ुटप्रिंट का पता चलता है.

अगर आपके ऐप्लिकेशन की मेमोरी का इस्तेमाल ज़्यादा है, तो इस पेज पर दिए गए दिशा-निर्देशों का इस्तेमाल करके, समस्या की जांच करें और उसे ठीक करें.

ज़्यादा मेमोरी का इस्तेमाल करने वाले प्रोसेस की पहचान करना

Android की ज़रूरी जानकारी

Android की ज़रूरी जानकारी, आपके ऐप्लिकेशन की मेमोरी के इस्तेमाल की जानकारी को इन प्रोसेस की स्थितियों के हिसाब से शेयर करती है:

  • फ़ोरग्राउंड: ऐप्लिकेशन की प्रोसेस दिखती है. यहां P99 ज़्यादा होने से, अक्सर उपयोगकर्ता को दिखने वाली परफ़ॉर्मेंस (जंक या ओओएम क्रैश) पर असर पड़ता है. साथ ही, इसकी मुख्य वजह ऐसे यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट या गतिविधियों को बनाए रखना है जिनकी अब ज़रूरत नहीं है.
  • उपयोगकर्ता को दिखने वाली सेवाएं: ऐप्लिकेशन की प्रोसेस, उपयोगकर्ता को दिखने वाली स्थिति में चल रही है. इसमें फ़ोरग्राउंड सेवाएं, तुरंत किए जाने वाले जॉब, और उपयोगकर्ता के अनुरोध पर शुरू होने वाले डेटा ट्रांसफ़र जॉब शामिल हैं. यह सिस्टम से जुड़ी सेवाओं या अन्य ऐप्लिकेशन से जुड़ी सेवाओं पर भी लागू हो सकता है. इन सेवाओं को लंबे समय तक चलने वाले टास्क के लिए डिज़ाइन किया गया है. इसलिए, मेमोरी लीक होने की वजह से मेमोरी को बनाए रखने या संसाधनों को रिलीज़ न करने से, समय के साथ P99 टेल बढ़ सकती है.
  • बैकग्राउंड में चल रहा है: ऐप्लिकेशन बैकग्राउंड में चलने वाली सेवा चला रहा है या हाल ही में बैकग्राउंड में चला गया है, लेकिन अभी तक कैश मेमोरी में सेव नहीं हुआ है. इस वजह से, बैकग्राउंड में प्रोसेस होने वाले डेटा और रिलीज़ नहीं किए गए संसाधनों की वजह से, बैटरी की खपत बढ़ सकती है. इस प्रोसेस की स्थिति, फ़ोरग्राउंड या यूज़र को दिखने वाली प्रोसेस की तुलना में कम अहम होती है. इसलिए, इस स्थिति में ज़्यादा मेमोरी बनाए रखने से बचें.
  • कैश किया गया: ऐप्लिकेशन को कैश किया गया है. यह स्थिति, सिस्टम की मेमोरी पर पड़ने वाले दबाव के लिए बहुत संवेदनशील होती है. जैसे, एलएमके. ओएस इस प्रोसेस की स्थिति को कभी भी हटा सकता है. इसलिए, यह स्थिति सिर्फ़ डीबग करने के मकसद से दी जाती है.

इन प्रोसेस की स्थितियों का onTrimMemory कॉलबैक से क्या संबंध है, यह समझने के लिए इवेंट के जवाब में मेमोरी रिलीज़ करने से जुड़े दिशा-निर्देश देखें.

Android की ज़रूरी जानकारी में, आपके ऐप्लिकेशन की मेमोरी के इस्तेमाल को रैम बकेट के हिसाब से भी बांटा जाता है. मेमोरी के इस्तेमाल की मेट्रिक को, रोज़ाना के पर्सेंटाइल की वैल्यू की टाइमलाइन के तौर पर दिखाया जाता है. साथ ही, 50वें और 90वें पर्सेंटाइल के लिए, रोज़ाना की सबसे नई वैल्यू भी दिखाई जाती है.

मेमोरी के इस्तेमाल की बेसलाइन का पता लगाने के बाद, मेमोरी के ज़्यादा इस्तेमाल की पहचान करने और उसे बेहतर बनाने के लिए दिए गए दिशा-निर्देशों का पालन करें.

टेल स्क्यू का इस्तेमाल करके मेमोरी लीक की पहचान करना

मेमोरी लीक का पता लगाने के लिए, Android की ज़रूरी जानकारी में जाकर, सामान्य (P50) और आखिर के (P90) उपयोगकर्ताओं के बीच अंतर देखें. ऐसेट ब्लोट की वजह से, सभी पर्सेंटाइल में मेमोरी का इस्तेमाल एक जैसा होता है. वहीं, मेमोरी लीक की वजह से समय के साथ मेमोरी का इस्तेमाल बढ़ता जाता है. इससे आखिर के डेटा पर काफ़ी असर पड़ता है.

आपको प्रोसेस के नाम के हिसाब से, अपनी P90 और P99 मेट्रिक की तुलना P50 बेसलाइन से करनी चाहिए. अगर P90 से P50 का अनुपात 3.5 गुना से ज़्यादा है, तो इसका मतलब है कि लंबे सेशन के दौरान मेमोरी लीक होने की संभावना है. कुछ मामलों में, मेमोरी के इस्तेमाल का बढ़ा हुआ अनुपात हमेशा मेमोरी लीक होने का संकेत नहीं देता. हालांकि, आपको यह तय करने के लिए खास वर्कफ़्लो का आकलन करना चाहिए कि मेमोरी के इस्तेमाल का बढ़ा हुआ अनुपात, उम्मीद के मुताबिक है या नहीं.

संसाधन

मेमोरी के बहुत ज़्यादा इस्तेमाल की समस्या का पता लगाना

मेमोरी का ज़्यादा इस्तेमाल करने की वजह का पता लगाने के लिए, डेवलपर सेटिंग, Android Studio या Perfetto में जाकर, Record heap dump की मदद से हीप डंप कैप्चर किया जा सकता है. हमारा सुझाव है कि अपने ऐप्लिकेशन के मुख्य उपयोगकर्ता फ़्लो की जांच करने के बाद, स्थानीय तौर पर हीप डंप कैप्चर करें.

हमारा सुझाव है कि आप खास तौर पर, उपयोगकर्ता के इन चरणों की जांच करें:

  • वेबव्यू और इन-ऐप्लिकेशन ब्राउज़र सेशन
  • मीडिया कॉन्टेंट वाला इनफ़ाइनाइट स्क्रोलिंग
  • ऐसेट बनाने और उनमें बदलाव करने के फ़्लो

मेमोरी लीक की संभावित समस्याओं की जांच करने के लिए, सबसे पहले Android की ज़रूरी जानकारी वाले मेमोरी इस्तेमाल करने के डैशबोर्ड में मौजूद प्रोसेस का नाम टेबल का इस्तेमाल करके, सबसे ज़्यादा मेमोरी इस्तेमाल करने वाली प्रोसेस की पहचान करें. इसके बाद, स्थानीय तौर पर उपयोगकर्ता के अनुभव से जुड़े टेस्ट चलाएं. साथ ही, प्रोसेस की अलग-अलग स्थितियों (दिखने वाली, फ़ोरग्राउंड सेवा, और कैश मेमोरी में सेव की गई) में हीप डंप इकट्ठा करें. इससे यह पुष्टि की जा सकेगी कि बैकग्राउंड में जाने के बाद ऐप्लिकेशन मेमोरी खाली करता है या नहीं.

अगर Android Studio Profiler का इस्तेमाल करके मेमोरी से जुड़ी समस्याओं को डीबग किया जा रहा है, तो LeakCanary इंटिग्रेशन का इस्तेमाल करके, लीक और डुप्लीकेट बिटमैप का पता लगाने की प्रोसेस को आसान बनाया जा सकता है. इससे इमेज के इस्तेमाल को ऑप्टिमाइज़ करने में मदद मिलती है.

हीप डंप इकट्ठा करने के बाद, हमारा सुझाव है कि आप Android प्रोफ़ाइलर की सुविधा का इस्तेमाल करें. इससे आपको, मेमोरी के ज़्यादा इस्तेमाल की वजहों का पता लगाने और हीप डंप का विश्लेषण करने में मदद मिलेगी.

यहां एक उदाहरण दिया गया है कि एआई की स्किल किस तरह से जवाब दे सकती हैं:

I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
  Summary of Findings
  The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
   1. [Library] Image Cache Optimization:
       * Review the [Library] caching strategy. Ensure that bitmaps
         loaded for animations are released or downsampled when the animation is
         not in the foreground.
   2. Asset Resolution Audit:
       * The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
   3. View Lifecycle Management:
       * Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
      tab are properly detached or their animations are cleared when switching between tabs.
   4. Fix Surface Leaks:
       * Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
         native resource exhaustion.

हीप डंप को समझने के लिए अतिरिक्त संसाधन

यहां दिए गए संसाधनों में, हीप डंप को समझने और मेमोरी के इस्तेमाल को डीबग करने के बारे में ज़्यादा जानकारी दी गई है:

  • मैन्युअल तरीके से विश्लेषण करना: Perfetto Heap Dump Explorer के दिशा-निर्देशों का इस्तेमाल करके, Perfetto यूज़र इंटरफ़ेस (यूआई) में हीप डंप विज़ुअलाइज़ेशन को नेविगेट करने और समझने का तरीका जानें.
  • Java/Kotlin के लिए मेमोरी का बंटवारा: Android Runtime (ART) हीप डंप का विश्लेषण करने के बारे में सिलसिलेवार तरीके से जानने के लिए, अपने पहले ART हीप डंप को विज़ुअलाइज़ करना लेख पढ़ें.
  • नेटिव मेमोरी का इस्तेमाल: नेटिव (C/C++) मेमोरी प्रोफ़ाइलें इकट्ठा करने और उनका विश्लेषण करने का तरीका जानने के लिए, Perfetto Native Profiling का दस्तावेज़ पढ़ें.
  • सीएलआई की मदद से जांच करना: किसी डिवाइस पर अपने ऐप्लिकेशन की मेमोरी के इस्तेमाल की जानकारी तुरंत पाने के लिए, adb dumpsys meminfo का इस्तेमाल करें.

मेमोरी के इस्तेमाल को बेहतर बनाना

अपने ऐप्लिकेशन की मेमोरी के इस्तेमाल को बेहतर बनाने के बारे में ज़्यादा जानने के लिए, इन सेक्शन को देखें:

मेमोरी से जुड़ी समस्याओं को ठीक करने के बारे में ज़्यादा जानकारी के लिए, अपने ऐप्लिकेशन की मेमोरी मैनेज करना गाइड देखें.