Android Profiler — এটি Android Studio-তে নির্মিত একটি টুলসেট যা রিয়েল-টাইমে অ্যাপ্লিকেশনের পারফরম্যান্স মনিটরিং করে। এটি CPU লোড, মেমোরি খরচ, নেটওয়ার্ক ট্রাফিক এবং এনার্জি খরচ ট্র্যাক করতে পারে তৃতীয়-পক্ষের লাইব্রেরি ছাড়াই। Android Developers অনুযায়ী, প্রোফাইলারটি সরাসরি IDE-তে সংযুক্ত এবং সংযুক্ত ডিভাইসের যেকোনো প্রক্রিয়ার জন্য মিলিসেকেন্ড নির্ভুলতা সহ মেট্রিক্স সরবরাহ করে।
মূল বিষয়
Android Profiler — এটি Android Studio-র একটি উপাদান যা পুরনো Android Monitor এবং DDMS-কে প্রতিস্থাপন করেছে। এটি অ্যাপ্লিকেশনের সব দিক প্রোফাইল করার জন্য একীভূত ইন্টারফেস সরবরাহ করে: CPU Profiler প্রসেসর বিশ্লেষণের জন্য, Memory Profiler মেমোরি নিয়ে কাজের জন্য, Network Profiler নেটওয়ার্ক রিকোয়েস্টের জন্য এবং Energy Profiler এনার্জি খরচের জন্য। Android Studio-র মাধ্যমে অ্যাপ্লিকেশন চালু করার সময় ডেটা স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয়।
প্রোফাইলারটি ইমুলেটর এবং USB-তে সংযুক্ত ফিজিক্যাল ডিভাইস উভয়েই কাজ করে। Google I/O 2023 অনুযায়ী, Android Profiler 70% এর বেশি Android প্রকল্পে ব্যবহৃত হয় এবং এটি পারফরম্যান্স ডায়াগনস্টিকসের স্ট্যান্ডার্ড টুল হিসেবে বিবেচিত। তৃতীয়-পক্ষের সমাধানের তুলনায় প্রধান সুবিধা — জিরো ইন্টিগ্রেশন: build.gradle-তে ডিপেন্ডেন্সি যোগ করার বা অ্যাপ্লিকেশনের কোড পরিবর্তন করার প্রয়োজন নেই।
Android Profiler-এর আর্কিটেকচার Perfetto-র উপর ভিত্তি করে — Android-এর সিস্টেম ট্রেসার যা কার্নেল এবং অ্যাপ্লিকেশন স্তর থেকে ডেটা সংগ্রহ করে। Perfetto ন্যূনতম ওভারহেড নিশ্চিত করে (1% CPU-র কম) এবং 30 মিনিট পর্যন্ত দীর্ঘমেয়াদী রেকর্ডিং সমর্থন করে। এটি কেবল দ্রুত অপারেশন নয়, দীর্ঘস্থায়ী পরিস্থিতিও প্রোফাইল করতে দেয় — স্ক্রিনের মধ্যে ট্রানজিশন, ব্যাকগ্রাউন্ড সিঙ্ক্রোনাইজেশন, এক ঘন্টা ব্যবহারের সময় মেমোরি খরচ।
প্রোফাইলার চার ধরনের ডেটা সংগ্রহ করে: CPU — প্রতিটি কোর এবং থ্রেডের লোড, Memory — Java Heap, Native Heap, Stack, Graphics, Network — সব ইনকামিং এবং আউটগোয়িং রিকোয়েস্ট, Energy — এনার্জি খরচের ক্যাটাগরি (Idle, Light, Medium, Heavy)। ডেটা টাইমলাইনে সিঙ্ক্রোনাইজ করা হয় — একসাথে দেখা যায় CPU পরিবর্তন কীভাবে Memory এবং এনার্জি খরচকে প্রভাবিত করে।
CPU Profiler রিয়েল-টাইমে টাইমলাইনে প্রসেসর লোড দেখায়, অ্যাপ্লিকেশনের থ্রেড অনুযায়ী ভাগ করা। প্রতিটি থ্রেড একটি রঙিন লাইন বা এলাকা দ্বারা উপস্থাপিত হয় — এলাকা যত প্রশস্ত, থ্রেড তত বেশি প্রসেসর সময় নেয়। লাল এলাকা মানে অ্যাপ্লিকেশনের কাজ, নীল — সিস্টেম কল, ধূসর — অপেক্ষা।
বিস্তারিত বিশ্লেষণের জন্য CPU Profiler তিনটি রেকর্ডিং মোড সমর্থন করে: Trace Java Methods (সব Java মেথডের ট্রেসিং), Trace C/C++ Functions (NDK নেটিভ ফাংশনের ট্রেসিং) এবং Sample Java Methods (স্যাম্পলিং, প্রস্তাবিত মোড)। স্যাম্পলিং সবচেয়ে কম ওভারহেড দেয় এবং দৈনন্দিন প্রোফাইলিংয়ের জন্য উপযুক্ত, পূর্ণ ট্রেসিং জটিল সমস্যা খোঁজার জন্য।
// উদাহরণ: CPU Profiler বিশ্লেষণ এই মেথডটিকে bottleneck হিসেবে দেখাবে
class DataProcessor {
suspend fun processLargeDataset(items: List<Item>): List<Result> {
// CPU Profiler inBackgroundThread-এ উচ্চ CPU লোড দেখাবে
return withContext(Dispatchers.Default) {
items.map { it.computeHeavyTransformation() }
}
}
}
// প্রোফাইলিংয়ের পরে সুপারিশ:
// computeHeavyTransformation 80% সময় নেয় — ফলাফল ক্যাশ করুন
class DataProcessorOptimized {
private val cache = LruCache<String, Result>(100)
suspend fun processLargeDataset(items: List<Item>): List<Result> {
return withContext(Dispatchers.Default) {
items.mapNotNull { cache.get(it.id) ?: it.computeHeavyTransformation().also { cache.put(it.id, it) } }
}
}
}
রেকর্ডিংয়ের পর CPU Profiler Top-Down Tree দেখায় — প্রতিটি মেথডের এক্সিকিউশন সময়সহ কল ট্রি। Self Time/Total কলামে মনোযোগ দিন: যদি কোনো মেথডের Self Time 16 ms-এর বেশি হয় এবং এটি UI থ্রেড থেকে কল করা হয় — এটি নিশ্চিত ফ্রেম ড্রপ। সমাধান — Dispatchers.IO বা Default-এর মাধ্যমে ভারী গণনা ব্যাকগ্রাউন্ড থ্রেডে সরানো।
Sample Java Methods — 3–5% ওভারহেডসহ দৈনন্দিন প্রোফাইলিংয়ের জন্য প্রস্তাবিত মোড। Trace Java Methods — প্রতিটি কলের পূর্ণ ট্রেসিং, 15% পর্যন্ত ওভারহেড, ছোট রেকর্ডিংয়ের জন্য ব্যবহৃত হয় (5–10 সেকেন্ড)। Trace C/C++ Functions — Linux Perf-এর মাধ্যমে NDK কোডের ট্রেসিং, গেম এবং C++ লাইব্রেরি বিশ্লেষণের জন্য অপরিহার্য। সমস্যার ধরন অনুযায়ী মোড পরিবর্তন করুন।
Memory Profiler অ্যাপ্লিকেশনের সব মেমোরি ক্যাটাগরি ট্র্যাক করে: Java Heap (JVM অবজেক্ট), Native Heap (JNI-এর মাধ্যমে C/C++ অ্যালোকেশন), Stack (থ্রেড স্ট্যাক) এবং Graphics (টেক্সচার, GPU বাফার)। প্রধান ভিজুয়ালাইজেশন — মেমোরি খরচের টাইম গ্রাফ, যেখানে প্রতিটি ক্যাটাগরি নিজস্ব রঙে দেখানো হয়। যদি গ্রাফ গার্বেজ কালেকশনের পর না কমে — লিক সন্দেহ করুন।
লিক খোঁজার জন্য Capture Heap Dump ফাংশন ব্যবহার করুন। ডাম্পের সময় Android Profiler অ্যাপ্লিকেশনটি ~100 ms-এর জন্য থামায় এবং HPROF ফাইল তৈরি করে — Java Heap-এর সব জীবিত অবজেক্টের পূর্ণ স্ন্যাপশট। ডাম্প খোলার পর আপনি Retained Size অনুযায়ী অবজেক্ট সাজাতে পারেন (অবজেক্ট মুছে ফেললে যে পরিমাণ মেমোরি মুক্ত হবে) এবং Activity, Fragment বা Bitmap-এর ইনস্ট্যান্স খুঁজতে পারেন যা ধ্বংস হওয়া উচিত ছিল।
Google I/O 2022 অনুযায়ী, Memory Profiler LeakCanary-র সাথে মিলে Android-এ মেমোরি লিক শনাক্তকরণের 95% পরিস্থিতি কভার করে। LeakCanary স্বয়ংক্রিয়ভাবে কাজ করে — ব্যাকগ্রাউন্ডে লিক শনাক্ত করে। Memory Profiler ম্যানুয়াল বিশ্লেষণের জন্য প্রয়োজন: আপনি অ্যালোকেশনের পূর্ণ চিত্র দেখতে পান, কেবল লিক নয়।
| মেমোরি ক্যাটাগরি | বিবরণ | সাধারণ আকার |
|---|---|---|
| Java Heap | JVM হিপ: Kotlin/Java অবজেক্ট | 5–200 MB |
| Native Heap | JNI, NDK-র মাধ্যমে অ্যালোকেশন | 1–100 MB |
| Graphics | টেক্সচার, GPU বাফার | 10–200 MB |
| Stack | সব থ্রেডের স্ট্যাক | 1–10 MB |
ডাম্প ক্যাপচারের পর Retained Size অনুযায়ী অবজেক্ট সাজান — এটি অবজেক্ট মুছে ফেললে যে পরিমাণ মেমোরি মুক্ত হবে। বড় Retained Size-সহ Activity, Fragment এবং Bitmap-এর ইনস্ট্যান্স খুঁজুন যা মেমোরিতে থাকা উচিত নয়। Reference Tree ট্যাবে যান যাতে অবজেক্ট ধরে রাখা রেফারেন্স চেইন দেখতে পারেন — সাধারণত এটি একটি সিঙ্গলটনের স্ট্যাটিক ফিল্ড বা অপরিষ্কৃত callback। গুরুত্বপূর্ণ মেট্রিক — Allocation rate (প্রতি সেকেন্ডে অ্যালোকেশনের সংখ্যা)। যদি allocation rate 10,000 অবজেক্ট/সেকেন্ড অতিক্রম করে, অ্যাপ্লিকেশন অস্থায়ী অবজেক্ট তৈরি এবং মুছে ফেলতে খুব বেশি সময় ব্যয় করে, যা GC-কে লোড করে এবং মাইক্রোফ্রিজ সৃষ্টি করে। এই ক্ষেত্রে View Inspector টুল ব্যবহার করুন এবং লুপে ঘন ঘন অবজেক্ট তৈরি হওয়া স্থানগুলি খুঁজুন।
Network Profiler রিয়েল-টাইমে টাইমলাইনে অ্যাপ্লিকেশনের সব নেটওয়ার্ক রিকোয়েস্ট প্রদর্শন করে। প্রতিটি রিকোয়েস্ট একটি অনুভূমিক বার হিসেবে দেখানো হয় — এর দৈর্ঘ্য এক্সিকিউশন সময়ের সাথে মিলে, রঙ — রিকোয়েস্টের ধরন (GET, POST, PUT, DELETE)। স্কেল স্ক্রোল করে দেখা যায় কীভাবে রিকোয়েস্ট সময়ে বিতরণ করা হয়েছে এবং সেগুলি ডুপ্লিকেট হচ্ছে কিনা।
সব জনপ্রিয় লাইব্রেরি সমর্থিত: OkHttp, Retrofit, Volley, Ktor। Ktor এবং OkHttp-র জন্য প্রোফাইলার পূর্ণ কল স্ট্যাক দেখায়, ইন্টারসেপ্টর এবং কনভার্টার সহ। প্রতিটি রিকোয়েস্টের জন্য Request Headers এবং Response Headers, রেসপন্স বডি (1 MB পর্যন্ত), স্ট্যাটাস কোড এবং সময় উপলব্ধ।
Network Profiler দ্বারা শনাক্ত সাধারণ সমস্যা: ক্যাশিংয়ের অভাব (একই URL প্রতিবার খোলার সময় অনুরোধ করা হয়), ডুপ্লিকেট রিকোয়েস্ট (দুটি কম্পোনেন্ট একই ডেটা একসাথে লোড করে), অতিরিক্ত রেসপন্স সাইজ (সার্ভার 5 MB পাঠায় যখন 50 KB প্রয়োজন)। Network Profiler টাইমলাইনের এক নজরেই এই সমস্যাগুলি দেখতে সাহায্য করে।
ধীর নেটওয়ার্ক সিমুলেশনের জন্য Android Studio-তে Network Conditioning ব্যবহার করুন — এটি ব্যান্ডউইথ 3G/2G-তে সীমাবদ্ধ করতে এবং বিলম্ব যোগ করতে দেয়। এটি অস্থির ইন্টারনেটযুক্ত অঞ্চলে কাজ করা অ্যাপ্লিকেশনগুলির জন্য খারাপ নেটওয়ার্ক অবস্থায় আচরণ পরীক্ষার জন্য অত্যন্ত গুরুত্বপূর্ণ।
Energy Profiler Perfetto ডেটার ভিত্তিতে ব্যাটারির উপর অ্যাপ্লিকেশনের প্রভাব মূল্যায়ন করে। টুলটি মিলিঅ্যাম্পে প্রকৃত খরচ পরিমাপ করে না, বরং প্রতিটি অপারেশনকে পাঁচটি এনার্জি খরচের ক্যাটাগরিতে শ্রেণীবদ্ধ করে: Idle, Light, Medium, High এবং Overloaded। Energy Profiler-এর টাইমলাইন রঙে হাইলাইট করা হয়: সবুজ (হালকা লোড), হলুদ (মধ্যম), লাল (উচ্চ)।
লাল জোনের প্রধান কারণ: WakeLock (অ্যাপ্লিকেশন প্রসেসর সক্রিয় রাখে), Location GPS (উচ্চ নির্ভুলতার সাথে ক্রমাগত অবস্থান অনুরোধ), Keep-Alive সংযোগ (সার্ভারের সাথে ঘন ঘন ডেটা বিনিময়), বড় ডেটা ট্রান্সফার (ফাইল পাঠানো, স্ট্রিমিং)। Energy Profiler সঠিকভাবে দেখায় কোন অপারেশন কোন সময়ে এনার্জি খরচের শিখর সৃষ্টি করেছে।
Android Developers অনুযায়ী, একটি সাধারণ অ্যাপ্লিকেশন High ক্যাটাগরিতে 5% এর বেশি সময় ব্যয় করা উচিত নয়। যদি Energy Profiler প্রোফাইলিং সময়ের 10% এর বেশি লাল জোন দেখায় — অ্যাপ্লিকেশনটি Battery Drain মানদণ্ডে রিভিউ পাস করবে না। সুপারিশ — ব্যাকগ্রাউন্ড কাজের জন্য WorkManager ব্যবহার করুন, Location অনুরোধ ন্যূনতম প্রয়োজনীয় নির্ভুলতায় সীমাবদ্ধ করুন এবং নেটওয়ার্ক রিকোয়েস্ট ব্যাচে একত্রিত করুন।
Android Profiler চালু করা হয় এক ক্লিকে: Android Studio-তে View → Tool Windows → Profiler খুলুন বা ডান প্যানেলে Profiler আইকনে ডাবল-ক্লিক করুন। সংযুক্ত ডিভাইসে অ্যাপ্লিকেশন চালু করার পর Android Studio স্বয়ংক্রিয়ভাবে প্রক্রিয়ার সাথে সংযুক্ত হবে এবং ডেটা সংগ্রহ শুরু করবে। টাইমলাইনে সঙ্গে সঙ্গে CPU, Memory, Network এবং Energy গ্রাফ দেখা যাবে।
বিস্তারিত বিশ্লেষণের জন্য প্রয়োজনীয় ট্যাব (CPU, Memory, Network বা Energy) নির্বাচন করুন এবং রেকর্ডিং শুরু করুন। CPU-র জন্য Sample Java Methods মোড 30 সেকেন্ড রেকর্ডিং সময়সহ সুপারিশ করি — এটি সাধারণ পরিস্থিতির জন্য যথেষ্ট। Memory-র জন্য — পরিস্থিতি সম্পাদনের পর হিপ ডাম্প (Capture Heap Dump)। Network-র জন্য রেকর্ডিং স্বয়ংক্রিয়ভাবে শুরু হয়, পরিস্থিতি শেষ হওয়ার পর Stop বাটন চাপুন।
রেকর্ডিং বন্ধ করার পর ডেটা এক্সপোর্ট করুন: File → Save As পুরো সেশন .perf ফাইলে সংরক্ষণ করে। এটি অপ্টিমাইজেশনের আগে ও পরে মেট্রিক তুলনা করার জন্য সুবিধাজনক। প্রথম স্থিতিশীল ভার্সনে baseline-সেশন তৈরি করুন এবং প্রতিটি নতুন সেশনের সাথে তুলনা করুন — এটি পারফরম্যান্স পরিবর্তন উদ্দেশ্যমূলকভাবে মূল্যায়নের একমাত্র উপায়।
Android Profiler কমান্ড লাইন থেকে Android Studio CLI এবং Firebase Test Lab-এর মাধ্যমে চালানো যায়। Firebase Test Lab UI-টেস্টের অংশ হিসেবে পারফরম্যান্স প্রোফাইলিং সমর্থন করে: আপনি টেস্ট ফলাফলের সাথে CPU, Memory এবং Network মেট্রিক পান। পাইপলাইন সেট আপ করুন যাতে মেট্রিক baseline থেকে 10% কমলে CI পাইপলাইন ডেভেলপার চেক না করা পর্যন্ত ব্লক হয়।
সচরাচর জিজ্ঞাসা
প্রভাব ন্যূনতম। Android Profiler ডেটা সংগ্রহের জন্য Perfetto ব্যবহার করে, যা 1% CPU-র কম ওভারহেড যোগ করে। Sample Java Methods মোডে ওভারহেড প্রায় 3–5%, যা দৃশ্যগত প্রোফাইলিংয়ের জন্য নগণ্য। পদ্ধতির পূর্ণ ট্রেসিং 15% পর্যন্ত ওভারহেড দিতে পারে, তাই এটি শুধুমাত্র ছোট রেকর্ডিংয়ের জন্য ব্যবহৃত হয়।
হ্যাঁ, সিস্টেম ট্রেস Perfetto CLI-র মাধ্যমে সরাসরি ডিভাইস থেকে রেকর্ড করা যায়: adb shell perfetto --out /data/local/tmp/trace.perf। তারপর ফাইলটি Perfetto UI (ui.perfetto.dev) ইন্টারফেসে খুলুন বা Android Studio-তে ইম্পোর্ট করুন অ্যাপ্লিকেশনের পূর্ণ মার্কআপসহ দেখার জন্য।
Android Profiler — একটি সিস্টেম টুল যার জন্য প্রক্সি কনফিগারেশনের প্রয়োজন নেই। রিকোয়েস্ট সরাসরি IDE-তে পারফরম্যান্সের প্রসঙ্গে দেখায়। Charles Proxy — একটি বাহ্যিক প্রক্সি-সার্ভার যা আরও বিস্তারিত বিশ্লেষণ সরবরাহ করে (ট্রাফিক ইন্টারসেপশন, রিকোয়েস্ট পরিবর্তন, পুনরায় পাঠানো)। পারফরম্যান্স প্রোফাইলিংয়ের জন্য Android Profiler ব্যবহার করুন, API কন্ট্রাক্ট বিশ্লেষণের জন্য — Charles।
পরিস্থিতি সম্পাদনের আগে হিপ ডাম্প নিন (যেমন Activity খোলার আগে)। পরিস্থিতি সম্পাদন করুন — Activity খুলুন এবং বন্ধ করুন। দ্বিতীয় ডাম্প নিন। জীবিত Activity ইনস্ট্যান্সের সংখ্যা তুলনা করুন: যদি দ্বিতীয় ডাম্পে বেশি থাকে — লিক। Retained Size অনুযায়ী সাজান, অতিরিক্ত Activity খুঁজুন এবং কারণ নির্ধারণের জন্য Reference Tree দেখুন।
Energy Profiler-এর জন্য ডিভাইস স্তরে Power Profiles সমর্থন এবং Android 8.0+ প্রয়োজন। ইমুলেটর এবং কিছু ফার্মওয়্যারে (বিশেষ করে চীনা) ডেটা অনুপস্থিত থাকতে পারে। সমাধান — Pixel বা Samsung রেফারেন্স ডিভাইসে খাঁটি Android ফার্মওয়্যারসহ এনার্জি খরচ প্রোফাইল করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন