Android डिवाइस की मेमोरी को समझना और उससे जुड़ी समस्या हल करना

Android डिवाइसों में मेमोरी एक अहम और सीमित संसाधन है. Android प्लैटफ़ॉर्म डेवलपर या ओईएम के तौर पर, यह समझना ज़रूरी है कि मेमोरी हर लेवल पर कैसे काम करती है. इसमें Java रनटाइम से लेकर Linux कर्नेल तक शामिल है. इससे एक बेहतर परफ़ॉर्मेंस वाला और स्टेबल सिस्टम बनाने में मदद मिलती है.

इस गाइड में, Android मेमोरी आर्किटेक्चर और विश्लेषण के लिए उपलब्ध टूल के बारे में खास जानकारी दी गई है. साथ ही, मेमोरी से जुड़ी समस्याओं की पहचान करने और उन्हें हल करने के लिए, कुछ प्रैक्टिकल एक्सरसाइज़ भी दी गई हैं.

मकसद

इस गाइड को पूरा करने के बाद, आपको ये काम करने में मदद मिलेगी:

  • Android मेमोरी के बुनियादी कॉन्सेप्ट के बारे में बताना. इसमें Zygote प्रोसेस मॉडल और मेमोरी-मैप की गई फ़ाइलें शामिल हैं.
  • रेज़िडेंट सेट साइज़ (आरएसएस), प्रपोर्शनल सेट साइज़ (पीएसएस), और यूनीक सेट साइज़ (यूएसएस) के बीच अंतर करना.
  • मेमोरी के इस्तेमाल का तुरंत आकलन करने के लिए, dumpsys meminfo और showmap जैसे स्टैंडर्ड कमांड-लाइन टूल इस्तेमाल करें.
  • AHAT का इस्तेमाल करके, Java के हीप डंप कैप्चर और विश्लेषण करें. इससे मेमोरी लीक और ज़रूरत से ज़्यादा मेमोरी ऐलोकेशन का पता लगाया जा सकता है.
  • पूरे सिस्टम में Java और नेटिव मेमोरी, दोनों की प्रोफ़ाइल बनाने के लिए, Perfetto और heapprofd का इस्तेमाल करें.
  • सिस्टम-वाइड मेमोरी प्रेशर इंडिकेटर को समझें, जैसे कि प्रेशर स्टॉल इन्फ़ॉर्मेशन (पीएसआई). साथ ही, लो मेमोरी किलर (एलएमके) गतिविधि पर नज़र रखें.
  • कर्नल-लेवल पर, मेमोरी को फिर से इस्तेमाल करने की गतिविधि पर नज़र रखें. इसमें ZRAM स्वैप और पेज कैश मेमोरी को हटाना शामिल है.

गाइड का स्ट्रक्चर

इस गाइड को इन सेक्शन में बांटा गया है. इन्हें क्रम से पढ़ा जाना चाहिए:

  1. बुनियादी सिद्धांत: Android मेमोरी के मुख्य तकनीकी सिद्धांत.
  2. मरीज़ की स्थिति का तुरंत आकलन करने वाले टूल: meminfo, showmap, और procstats का इस्तेमाल करके, मरीज़ की स्थिति का तुरंत आकलन किया जा सकता है.
  3. Java मेमोरी का विश्लेषण करना: AHAT की मदद से, Java हीप के बारे में ज़्यादा जानकारी पाएं.
  4. बिटमैप और मेमोरी: यह समझना कि इमेज, रैम पर कैसे असर डालती हैं. साथ ही, उन्हें प्रोफ़ाइल करने के लिए टूल इस्तेमाल करना.
  5. नेटिव मेमोरी का विश्लेषण करना: Perfetto और heapprofd की मदद से, C/C++ मेमोरी की प्रोफ़ाइलिंग करना.
  6. वेबव्यू और मेमोरी: वेबव्यू के मल्टी-प्रोसेस आर्किटेक्चर और मेमोरी फ़ुटप्रिंट को समझना.
  7. ऐप्लिकेशन कोड मेमोरी है: यह समझना कि क्लास लोड होने और dex ब्लोट से रैम पर क्या असर पड़ता है.
  8. थ्रेड और मेमोरी: नेटिव थ्रेड स्टैक की लागत का विश्लेषण करना.
  9. मेमोरी लोकैलिटी और परफ़ॉर्मेंस: यह समझना कि डेटा ऐक्सेस करने के पैटर्न, सीपीयू की परफ़ॉर्मेंस पर कैसे असर डालते हैं.
  10. सर्विस बाइंडिंग और प्रोसेस की स्थितियां: यह समझना कि क्रॉस-प्रोसेस डिपेंडेंसी, ओओएम स्कोर पर कैसे असर डालती हैं.
  11. पूरे सिस्टम की समस्या हल करना: पीएसआई, एलएमके, ज़ेडआरएएम स्वैप, और पेज कैश मेमोरी को खाली करने की प्रोसेस को मॉनिटर करना.
  12. मेमोरी को फिर से इस्तेमाल करना: इविक्शन और स्वैप: memory.reclaim की मदद से, memcg, चार्ज, और प्रोऐक्टिव रिक्लेम को समझना.
  13. kswapd और lmkd के बीच इंटरैक्शन: यह समझना कि kswapd और lmkd, मेमोरी की कमी होने पर एक साथ कैसे काम करते हैं.
  14. मेमोरी पेज को ओएस पर वापस भेजना: madvise और posix_fadvise का इस्तेमाल करके, इस्तेमाल न किए गए हीप पेज और फ़ाइल कैश मेमोरी वाले पेज को कर्नेल पर वापस भेजना.
  15. बैकग्राउंड में चलने वाली प्रोसेस को कम से कम रिसॉर्स के साथ चालू रखना: बैकग्राउंड में चलने वाली सेवाओं और वर्कर को एक खास प्रोसेस में ले जाना, ताकि यूज़र इंटरफ़ेस (यूआई) और ग्राफ़िक्स मेमोरी को ज़्यादा प्राथमिकता न दी जाए.

ज़रूरी शर्तें और एनवायरमेंट

इस गाइड में, रेफ़रंस वर्कफ़्लो, मानदंड डेटा, और केस स्टडी दी गई हैं. इनसे Android डिवाइसों में मेमोरी से जुड़ी समस्याओं का पता लगाने और उन्हें हल करने का तरीका पता चलता है.

  • विश्लेषण के टूल: इस गाइड में दी गई तकनीकों में, मुख्य रूप से Android की परफ़ॉर्मेंस से जुड़े स्टैंडर्ड टूल इस्तेमाल किए जाते हैं. इनमें Perfetto, dumpsys meminfo, showmap, और AHAT शामिल हैं.
  • रूट प्रिविलेज: सिस्टम-लेवल के कुछ डाइग्नोस्टिक वर्कफ़्लो (जैसे, कर्नेल मेमोरी प्रेशर या हार्डवेयर पीएमयू काउंटर की जांच करना) के लिए, userdebug डिवाइस या एम्युलेटर बिल्ड पर रूट प्रिविलेज (adb root) की ज़रूरत होती है.

यहां से शुरू करें: बुनियादी सिद्धांत