मेमोरी का इस्तेमाल (बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी + स्वैप मेमोरी), 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 UI में, हीप डंप के विज़ुअलाइज़ेशन को नेविगेट करने और उनकी व्याख्या करने का तरीका जानने के लिए, Perfetto Heap Dump Explorer के निर्देश देखें.
- 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 का इस्तेमाल करें.
मेमोरी के इस्तेमाल को बेहतर बनाना
अपने ऐप्लिकेशन की मेमोरी के इस्तेमाल को बेहतर बनाने के बारे में ज़्यादा जानने के लिए, ये सेक्शन देखें:
- अपने ऐप्लिकेशन के कोड और रिसॉर्स फ़ुटप्रिंट को कम करना
- उपलब्ध मेमोरी और मेमोरी के इस्तेमाल की निगरानी करना
- मेमोरी का कम इस्तेमाल करने वाले कोड कंस्ट्रक्ट का इस्तेमाल करना
मेमोरी से जुड़ी समस्याओं को ठीक करने के बारे में ज़्यादा जानकारी पाने के लिए, अपनी ऐप्लिकेशन की मेमोरी मैनेज करना गाइड देखें.