मेमोरी का इस्तेमाल (बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी + स्वैप मेमोरी), Android की ज़रूरी जानकारी में शामिल एक मेट्रिक है. इससे पता चलता है कि आपका ऐप्लिकेशन कितनी मेमोरी का इस्तेमाल कर रहा है.
बिना सोर्स फ़ाइल वाली मेमोरी, स्टोरेज में मौजूद किसी फ़ाइल से जुड़ी मेमोरी नहीं होती. जैसे, हीप एलोकेशन और mmap-allocated मेमोरी. इससे आपके ऐप्लिकेशन के डाइनैमिक मेमोरी एलोकेशन की जानकारी मिलती है. इसमें 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 की ज़रूरी जानकारी के मेमोरी के इस्तेमाल के डैशबोर्ड में मौजूद Process name टेबल का इस्तेमाल करके, सबसे ज़्यादा मेमोरी इस्तेमाल करने वाली प्रोसेस की पहचान करें. इसके बाद, उपयोगकर्ता के सफ़र को स्थानीय तौर पर चलाएं और अलग-अलग प्रोसेस की स्थितियों (दिखने वाली, फ़ोरग्राउंड सेवा, और कैश की गई) में हीप डंप इकट्ठा करें. इससे यह पुष्टि की जा सकेगी कि ऐप्लिकेशन के बैकग्राउंड में जाने के बाद, मेमोरी रिलीज़ होती है या नहीं.
अगर Android Studio Profiler का इस्तेमाल करके, मेमोरी से जुड़ी समस्याओं को डीबग किया जा रहा है, तो LeakCanary इंटिग्रेशन का इस्तेमाल करके, लीक का पता लगाने की प्रोसेस को आसान बनाया जा सकता है. साथ ही, डुप्लीकेट बिटमैप का पता लगाकर, इमेज के इस्तेमाल को ऑप्टिमाइज़ किया जा सकता है.
हीप डंप इकट्ठा करने के बाद, हमारा सुझाव है कि Perfetto AI Skills का इस्तेमाल करके, हीप डंप का विश्लेषण करें और ज़्यादा मेमोरी का इस्तेमाल होने की संभावित वजहों की पहचान करें.
यहां एक उदाहरण दिया गया है कि एआई स्किल, किस तरह का जवाब दे सकती हैं:
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) हीप डंप का विश्लेषण करने के लिए, चरण-दर-चरण जानकारी पाने के लिए, Visualizing your first ART heap dump लेख पढ़ें.
- नेटिव एलोकेशन: नेटिव (C/C++) मेमोरी प्रोफ़ाइल इकट्ठा करने और उनका विश्लेषण करने का तरीका जानने के लिए, Perfetto Native Profiling का दस्तावेज़ देखें.
- सीएलआई की जांच: किसी डिवाइस पर अपने ऐप्लिकेशन की मेमोरी के इस्तेमाल की जानकारी तुरंत पाने के लिए, adb dumpsys meminfo का इस्तेमाल करें.
- एआई की मदद से विश्लेषण: अपने ट्रेस में मेमोरी लीक और ज़्यादा एलोकेशन का पता लगाने के लिए, एलएलएम की मदद से विश्लेषण करने के लिए, Perfetto AI Skills का इस्तेमाल करें.
- एसक्यूएल पर आधारित विश्लेषण: जटिल ट्रेस डेटा का विश्लेषण करने के लिए, स्ट्रक्चर्ड क्वेरी और खास स्क्रिप्ट चलाने के लिए, Perfetto SQL और Trace Analysis Skills का इस्तेमाल करें.
मेमोरी के इस्तेमाल को बेहतर बनाना
अपने ऐप्लिकेशन की मेमोरी के इस्तेमाल को बेहतर बनाने के बारे में ज़्यादा जानने के लिए, ये सेक्शन देखें:
- अपने ऐप्लिकेशन के कोड और रिसॉर्स फ़ुटप्रिंट को कम करना
- उपलब्ध मेमोरी और मेमोरी के इस्तेमाल की निगरानी करना
- मेमोरी का कम इस्तेमाल करने वाले कोड कंस्ट्रक्ट का इस्तेमाल करना
मेमोरी से जुड़ी समस्याओं को ठीक करने के बारे में ज़्यादा जानकारी पाने के लिए, अपनी ऐप्लिकेशन की मेमोरी मैनेज करना गाइड देखें.