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. ऐप्लिकेशन कोड, मेमोरी है: क्लास लोडिंग और डेक्स ब्लोट से रैम पर पड़ने वाले असर के बारे में जानकारी.
  8. थ्रेड और मेमोरी: नेटिव थ्रेड स्टैक की लागत का विश्लेषण करना.
  9. मेमोरी लोकैलिटी और परफ़ॉर्मेंस: यह समझना कि डेटा ऐक्सेस करने के पैटर्न से सीपीयू की परफ़ॉर्मेंस पर क्या असर पड़ता है.
  10. सर्विस बाइंडिंग और प्रोसेस की स्थितियां: यह समझना कि क्रॉस-प्रोसेस डिपेंडेंसी, ओओएम स्कोर को कैसे प्रभावित करती हैं.
  11. सिस्टम से जुड़ी समस्याओं को हल करना: पीएसआई, एलएमके, ज़ेडआरएएम स्वैप, और पेज कैश मेमोरी को हटाने की प्रोसेस की निगरानी करना.
  12. मेमोरी वापस पाना: इविक्शन और स्वैप: memcg, चार्ज, और memory.reclaim के साथ मेमोरी वापस पाने की सुविधा के बारे में जानकारी.
  13. kswapd और lmkd के बीच इंटरैक्शन: यह समझना कि kswapd और lmkd, दबाव में एक साथ कैसे काम करते हैं.

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

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

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

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