মেমরি ব্যবহার (অ্যানোনিমাস আরএসএস + সোয়াপ) হলো অ্যান্ড্রয়েড ভাইটালস-এর একটি মেট্রিক যা আপনার অ্যাপের মেমরি ব্যবহারের পরিমাণ তুলে ধরে।
অ্যানোনিমাস মেমরি হলো এমন মেমরি যা স্টোরেজে কোনো ফাইল দ্বারা সমর্থিত নয়, যেমন হিপ অ্যালোকেশন এবং mmap-অ্যালোকেটেড মেমরি। এটি আপনার অ্যাপের ডাইনামিক মেমরি অ্যালোকেশনগুলোকে ধারণ করে, যার মধ্যে রয়েছে জাভা বা কোটলিন হিপ, আনম্যানেজড নেটিভ হিপ অ্যালোকেশন (যেখানে অ্যান্ড্রয়েড ৮.০ (এপিআই লেভেল ২৬) এবং তার উপরের সংস্করণগুলোতে বিটম্যাপ পিক্সেল ডেটা থাকে), এবং থ্রেড এক্সিকিউশন স্ট্যাক। যদিও অপারেটিং সিস্টেম চাপের মুখে ফাইল-সমর্থিত মেমরি বাদ দিতে পারে, এটি অ্যানোনিমাস মেমরি বাদ দিতে পারে না।
রেসিডেন্ট সেট সাইজ (RSS) হলো কোনো প্রসেস দ্বারা ব্যবহৃত এবং ফিজিক্যাল র্যামে সংরক্ষিত মোট মেমরি পেজের (শেয়ার্ড এবং নন-শেয়ার্ড উভয়ই) সংখ্যা। একটি পেজকে "শেয়ার্ড" হিসেবে গণ্য করা হয় যদি একাধিক প্রসেস এটি ব্যবহার করে (যেমন একই লাইব্রেরি ব্যবহারকারী অ্যাপ)।
অ্যানোনিমাস মেমোরির ক্ষেত্রে, মেমোরির উপর চাপ পড়লে সিস্টেম সোয়াপ স্পেসে (অথবা অ্যান্ড্রয়েডে zRAM-এ) পেজ লিখতে পারে। প্রয়োজনে সিস্টেম সোয়াপ থেকে এই পেজগুলো আবার পড়ে নিতে পারে।
সামগ্রিকভাবে, মেমরি ব্যবহার (অ্যানোনিমাস আরএসএস + সোয়াপ) হলো স্টোরেজে থাকা কোনো ফাইল দ্বারা সমর্থিত নয় এমন আপনার অ্যাপের মোট মেমরি পেজের সংখ্যার একটি পরিমাপ, যার মধ্যে সিস্টেম দ্বারা সোয়াপে সংরক্ষিত যেকোনো মেমরিও অন্তর্ভুক্ত। অ্যানোনিমাস আরএসএস + সোয়াপ ট্র্যাক করার মাধ্যমে আপনি আপনার অ্যাপের প্রকৃত, অপসারণ-অযোগ্য মেমরি ফুটপ্রিন্ট দেখতে পান।
যদি আপনার অ্যাপের মেমরি ব্যবহার বেশি হয়, তাহলে বিষয়টি আরও খতিয়ে দেখুন এবং এই পৃষ্ঠার নির্দেশনা অনুসরণ করে সমস্যাটি সমাধান করুন।
উচ্চ মেমরি ব্যবহার শনাক্ত করুন
অ্যান্ড্রয়েড ভাইটালস
অ্যান্ড্রয়েড ভাইটালস আপনার অ্যাপের মেমরি ব্যবহারের চিত্রটি নিম্নলিখিত প্রসেস স্টেট অনুযায়ী বিভক্ত করে দেখায়:
- ফোরগ্রাউন্ড : অ্যাপটির প্রসেস দৃশ্যমান থাকে। এখানে উচ্চ P99 প্রায়শই ব্যবহারকারীর অনুভূত পারফরম্যান্সকে প্রভাবিত করে (জ্যাঙ্ক বা OOM ক্র্যাশ) এবং এটি মূলত আনএক্সিকিউটেড UI কম্পোনেন্ট বা অ্যাক্টিভিটি দ্বারা চালিত হয়।
- ফোরগ্রাউন্ড সার্ভিস : অ্যাপটি একটি ফোরগ্রাউন্ড সার্ভিস চালাচ্ছে। যেহেতু এই সার্ভিসগুলো দীর্ঘ সময় ধরে চলা কাজের জন্য ডিজাইন করা হয়েছে, তাই এগুলো ক্রমবর্ধমান লাইফসাইকেল লিকের প্রধান কারণ, যা সময়ের সাথে সাথে P99 টেইলকে দ্রুতগতিতে বাড়িয়ে তোলে।
- প্রেক্ষাপট : অ্যাপটি একটি ব্যাকগ্রাউন্ড সার্ভিস চালাচ্ছে, অথবা সম্প্রতি ব্যাকগ্রাউন্ডে গেছে, কিন্তু এখনও ক্যাশ করা হয়নি। এখানেই ব্যাকগ্রাউন্ড প্রসেসিং লিকগুলো বাড়তে থাকে।
- ক্যাশড : অ্যাপটি একটি ক্যাশড অবস্থায় আছে। এই অবস্থাটি সিস্টেম মেমরির চাপের (যেমন LMK) প্রতি অত্যন্ত সংবেদনশীল। যেহেতু অপারেটিং সিস্টেম ইচ্ছামতো এই প্রসেস অবস্থাটি বাতিল করতে পারে, তাই এই অবস্থাটি শুধুমাত্র ডিবাগিংয়ের উদ্দেশ্যে প্রদান করা হয়।
এই প্রসেস স্টেটগুলো কীভাবে onTrimMemory কলব্যাকগুলোর সাথে সম্পর্কিত, তা বুঝতে ইভেন্টের প্রতিক্রিয়ায় মেমরি মুক্ত করার নির্দেশিকা দেখুন।
অ্যান্ড্রয়েড ভাইটালস আপনার অ্যাপের মেমরি ব্যবহারকে র্যামের বিভিন্ন ভাগে ভাগ করে দেখায়। মেমরি ব্যবহারের এই মেট্রিকটি দৈনিক পার্সেন্টাইল মানগুলোর একটি টাইমলাইন হিসেবে প্রদর্শিত হয় এবং এর পাশাপাশি ৫০তম ও ৯০তম পার্সেন্টাইলের সর্বশেষ দৈনিক মানও দেখানো হয়।
একবার আপনার স্মৃতিশক্তির ভিত্তিস্তর শনাক্ত করার পর, অতিরিক্ত স্মৃতিশক্তির ব্যবহার নির্ণয় ও তা উন্নত করার জন্য নির্দেশিকা অনুসরণ করুন।
টেইল স্কিউ ব্যবহার করে মেমরি লিক শনাক্ত করুন
মেমরি লিক শনাক্ত করতে, অ্যান্ড্রয়েডের গুরুত্বপূর্ণ তথ্যে আপনার সাধারণ (P50) এবং সর্বনিম্ন স্তরের (P90) ব্যবহারকারীদের মধ্যে কোনো পার্থক্য আছে কিনা তা লক্ষ্য করুন। যেখানে সাধারণ অ্যাসেট ব্লট সব পার্সেন্টাইল জুড়ে মেমরিকে সমানভাবে বাড়িয়ে তোলে, সেখানে মেমরি লিক সময়ের সাথে সাথে বাড়তে থাকে, যা সর্বনিম্ন স্তরের ডেটাকে ব্যাপকভাবে প্রভাবিত করে।
আপনার প্রসেসের নাম অনুযায়ী P50 বেসলাইনের সাথে আপনার P90 এবং P99 মেট্রিকগুলো তুলনা করা উচিত। যদি আপনার P90 থেকে P50-এর অনুপাত ৩.৫ গুণের বেশি হয়, তবে এটি দীর্ঘ সেশন চলাকালীন একটি সম্ভাব্য মেমরি লিকের ইঙ্গিত দেয়। কিছু নির্দিষ্ট ব্যবহারের ক্ষেত্রে, একটি উচ্চ অনুপাত সবসময় লিকের ইঙ্গিত দেয় না, তবে এই বর্ধিত মেমরি ব্যবহার একটি প্রত্যাশিত আচরণ কিনা তা নির্ধারণ করতে আপনার নির্দিষ্ট ওয়ার্কফ্লোটি মূল্যায়ন করা উচিত।
সম্পদ
স্থানীয়ভাবে অতিরিক্ত মেমরি ব্যবহার নির্ণয় করুন
অতিরিক্ত মেমরি ব্যবহারের উৎস নির্ণয় শুরু করতে, আপনি ডেভেলপার সেটিংস, অ্যান্ড্রয়েড স্টুডিও বা পারফেটটো -তে থাকা ‘রেকর্ড হিপ ডাম্প’ বিকল্পটি ব্যবহার করে একটি হিপ ডাম্প ক্যাপচার করতে পারেন। আমরা আপনাকে পরামর্শ দিই যে, আপনার অ্যাপের মূল ইউজার জার্নিগুলো পরীক্ষা করার পর স্থানীয়ভাবে একটি হিপ ডাম্প ক্যাপচার করে কাজ শুরু করুন।
আমরা বিশেষভাবে নিম্নলিখিত ব্যবহারকারী যাত্রাগুলো পরীক্ষা করার সুপারিশ করছি:
- ওয়েবভিউ এবং ইন-অ্যাপ ব্রাউজার সেশন
- মিডিয়া-বহুল অসীম স্ক্রোলিং
- সম্পদ তৈরি এবং সম্পাদনা প্রবাহ
সম্ভাব্য মেমরি লিক তদন্ত করতে, প্রথমে অ্যান্ড্রয়েড ভাইটালস মেমরি ইউসেজ ড্যাশবোর্ডের প্রসেস নেম টেবিল ব্যবহার করে সর্বাধিক মেমরি ব্যবহারকারী প্রসেসগুলো শনাক্ত করুন। এরপর, সংশ্লিষ্ট ইউজার জার্নিগুলো স্থানীয়ভাবে চালান এবং বিভিন্ন প্রসেস স্টেটে (ভিজিবল, ফোরগ্রাউন্ড সার্ভিস এবং ক্যাশড) হিপ ডাম্প সংগ্রহ করে যাচাই করুন যে অ্যাপটি ব্যাকগ্রাউন্ডে যাওয়ার পর মেমরি রিলিজ করে কিনা।
আপনি যদি অ্যান্ড্রয়েড স্টুডিও প্রোফাইলার ব্যবহার করে মেমরি সংক্রান্ত সমস্যা ডিবাগ করেন, তাহলে লিক ডিটেকশন ও ডুপ্লিকেট বিটম্যাপ ডিটেকশনকে আরও সহজ করতে এবং আপনার ছবির ব্যবহার অপ্টিমাইজ করতে LeakCanary ইন্টিগ্রেশনটিও ব্যবহার করতে পারেন।
হিপ ডাম্প সংগ্রহ করার পর, আমরা হিপ ডাম্পটি বিশ্লেষণ করতে এবং উচ্চ মেমরি ব্যবহারের সম্ভাব্য উৎসগুলো শনাক্ত করতে পারফেটটো এআই স্কিলস ব্যবহার করার পরামর্শ দিই।
এআই দক্ষতাগুলো কী ধরনের প্রতিক্রিয়া জানাতে পারে তার একটি উদাহরণ নিচে দেওয়া হলো:
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.
হিপ ডাম্প ব্যাখ্যা করার জন্য অতিরিক্ত রিসোর্স
হিপ ডাম্প ব্যাখ্যা করা এবং মেমরি ব্যবহারের ডিবাগিং সম্পর্কে আরও তথ্য নিম্নলিখিত রিসোর্সগুলোতে দেওয়া আছে:
- ম্যানুয়াল বিশ্লেষণ: পারফেটটো UI-তে হিপ ডাম্প ভিজ্যুয়ালাইজেশনগুলো কীভাবে নেভিগেট ও ব্যাখ্যা করতে হয়, তা শিখতে পারফেটটো হিপ ডাম্প এক্সপ্লোরার গাইডেন্স ব্যবহার করুন।
- জাভা/কটলিন অ্যালোকেশন: অ্যান্ড্রয়েড রানটাইম (ART) হিপ ডাম্প বিশ্লেষণ করার ধাপে ধাপে নির্দেশনার জন্য “Visualizing your first ART heap dump” পড়ুন।
- নেটিভ অ্যালোকেশন: নেটিভ (C/C++) মেমরি প্রোফাইল কীভাবে সংগ্রহ ও বিশ্লেষণ করতে হয়, তা জানতে পারফেটটো নেটিভ প্রোফাইলিং ডকুমেন্টেশন দেখুন।
- CLI পরিদর্শন: কোনো ডিভাইসে আপনার অ্যাপের মেমরি ব্যবহারের দ্রুত বিবরণ পেতে adb dumpsys meminfo ব্যবহার করুন।
- এআই-সহায়তাযুক্ত বিশ্লেষণ: আপনার ট্রেস থেকে মেমরি লিক এবং অতিরিক্ত অ্যালোকেশন শনাক্ত করতে পারফেটটো এআই স্কিলস ব্যবহার করে এলএলএম-চালিত বিশ্লেষণ চালান।
- SQL-ভিত্তিক বিশ্লেষণ: জটিল ট্রেস ডেটা বিশ্লেষণ করতে স্ট্রাকচার্ড কোয়েরি এবং বিশেষায়িত স্ক্রিপ্ট চালানোর জন্য পারফেটটো SQL এবং ট্রেস অ্যানালাইসিস স্কিলস ব্যবহার করুন।
স্মৃতিশক্তির ব্যবহার উন্নত করুন
আপনার অ্যাপের মেমরি ব্যবহার উন্নত করার বিষয়ে আরও জানতে এই বিভাগগুলি দেখুন:
- আপনার অ্যাপের কোড এবং রিসোর্স ফুটপ্রিন্ট হ্রাস করুন।
- উপলব্ধ মেমরি এবং মেমরি ব্যবহার নিরীক্ষণ করুন
- আরও মেমরি-সাশ্রয়ী কোড কাঠামো ব্যবহার করুন
মেমরি সংক্রান্ত সমস্যা সমাধানের বিস্তারিত নির্দেশনার জন্য, 'আপনার অ্যাপের মেমরি পরিচালনা ' নির্দেশিকাটি দেখুন।