मेमोरी का इस्तेमाल (बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी और स्वैप मेमोरी) Android की ज़रूरी जानकारी में शामिल एक मेट्रिक है. इससे पता चलता है कि आपका ऐप्लिकेशन कितनी मेमोरी का इस्तेमाल कर रहा है.
बिना सोर्स फ़ाइल वाली मेमोरी, स्टोरेज में मौजूद किसी फ़ाइल से जुड़ी मेमोरी नहीं होती. जैसे, हीप एलोकेशन और mmap-allocated मेमोरी. इससे आपके ऐप्लिकेशन के डाइनैमिक मेमोरी एलोकेशन का पता चलता है. इसमें Java या Kotlin हीप, अनमैनेज्ड नेटिव हीप एलोकेशन (जिसमें Android 8.0 (एपीआई लेवल 26) और इसके बाद के वर्शन पर बिटमैप पिक्सल डेटा मौजूद होता है) और थ्रेड एक्ज़ीक्यूशन स्टैक शामिल हैं. ऑपरेटिंग सिस्टम, फ़ाइल से जुड़ी मेमोरी को कम कर सकता है, लेकिन वह बिना सोर्स फ़ाइल वाली मेमोरी को कम नहीं कर सकता.
रेज़िडेंट सेट साइज़ (आरएसएस) मेमोरी पेजों की कुल संख्या है. इसमें शेयर किए गए और शेयर नहीं किए गए, दोनों तरह के पेज शामिल हैं. इसका इस्तेमाल किसी प्रोसेस के लिए किया जाता है. यह संख्या, फ़िज़िकल रैम में मौजूद होती है. किसी पेज को "शेयर किया गया" तब माना जाता है, जब उसे एक से ज़्यादा प्रोसेस ऐक्सेस करती हैं. जैसे, ऐसे ऐप्लिकेशन जो एक ही लाइब्रेरी को ऐक्सेस करते हैं.
बिना सोर्स फ़ाइल वाली मेमोरी के लिए, सिस्टम मेमोरी पर दबाव पड़ने पर, पेजों को स्वैप स्पेस (या Android पर zRAM) में लिख सकता है. ज़रूरत पड़ने पर, सिस्टम इन पेजों को स्वैप से वापस पढ़ सकता है.
कुल मिलाकर, मेमोरी का इस्तेमाल (बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी और स्वैप मेमोरी) इस बात का मेज़रमेंट है कि आपका ऐप्लिकेशन, स्टोरेज में मौजूद किसी फ़ाइल से जुड़ी मेमोरी के अलावा, मेमोरी के कितने पेजों का इस्तेमाल कर रहा है. इसमें वह मेमोरी भी शामिल है जिसे सिस्टम, स्वैप में सेव करके रखता है. बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी और स्वैप मेमोरी को ट्रैक करने से, आपको अपने ऐप्लिकेशन के मेमोरी फ़ुटप्रिंट की सही जानकारी मिलती है. इसे कम नहीं किया जा सकता.
अगर आपका ऐप्लिकेशन ज़्यादा मेमोरी का इस्तेमाल कर रहा है, तो इसकी वजह का पता लगाएं और इस पेज पर दिए गए निर्देशों का इस्तेमाल करके समस्या को ठीक करें.
ज़्यादा मेमोरी इस्तेमाल होने की वजह का पता लगाना
Android की ज़रूरी जानकारी
Android की ज़रूरी जानकारी में, आपके ऐप्लिकेशन की मेमोरी के इस्तेमाल की जानकारी, प्रोसेस की इन स्थितियों के हिसाब से शेयर की जाती है:
- फ़ोरग्राउंड: ऐप्लिकेशन की प्रोसेस दिख रही है. यहां P99 की वैल्यू ज़्यादा होने पर, अक्सर उपयोगकर्ता को दिखने वाली परफ़ॉर्मेंस (जंक या OOM क्रैश) पर असर पड़ता है. ऐसा अक्सर, यूज़र इंटरफ़ेस (यूआई) के उन कॉम्पोनेंट या गतिविधियों को बनाए रखने की वजह से होता है जिनकी अब ज़रूरत नहीं है.
- परसेप्टिबल सर्विस: ऐप्लिकेशन की प्रोसेस, परसेप्टिबल स्थिति में चल रही है. इसमें फ़ोरग्राउंड सेवाएं, तेज़ गति से काम करने वाली जॉब, और उपयोगकर्ता के अनुरोध पर शुरू होने वाली डेटा ट्रांसफ़र जॉब शामिल हैं. यह सिस्टम से जुड़ी सेवाओं या अन्य ऐप्लिकेशन से जुड़ी सेवाओं तक भी बढ़ सकती है. इन सेवाओं को लंबे समय तक चलने वाले टास्क के लिए डिज़ाइन किया गया है. इसलिए, मेमोरी लीक होने या संसाधनों को रिलीज़ न करने की वजह से, समय के साथ 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 का इस्तेमाल करें.
मेमोरी के इस्तेमाल को बेहतर बनाना
अपने ऐप्लिकेशन की मेमोरी के इस्तेमाल को बेहतर बनाने के बारे में ज़्यादा जानने के लिए, ये सेक्शन देखें:
- अपने ऐप्लिकेशन के कोड और संसाधन के फ़ुटप्रिंट को कम करना
- उपलब्ध मेमोरी और मेमोरी के इस्तेमाल की निगरानी करना
- मेमोरी का कम इस्तेमाल करने वाले कोड कंस्ट्रक्ट का इस्तेमाल करना
मेमोरी से जुड़ी समस्याओं को ठीक करने के बारे में ज़्यादा जानकारी पाने के लिए, अपनी ऐप्लिकेशन की मेमोरी मैनेज करना गाइड देखें.