অ্যান্ড্রয়েডে আপনি বিভিন্ন ধরনের পারফরম্যান্স প্রোফাইল রেকর্ড করতে পারেন। প্রোফাইল সংগ্রহ করা আপনাকে আপনার অ্যাপটি কত দ্রুত চলে, কী পরিমাণ মেমরি ব্যবহার করে, কী পরিমাণ শক্তি খরচ করে এবং আরও অনেক কিছু সম্পর্কিত সমস্যা ডিবাগ করতে সাহায্য করে।
এই নথিতে সবচেয়ে দরকারি প্রোফাইলের প্রকারভেদ এবং সাধারণ পারফরম্যান্স সমস্যা ডিবাগ করার জন্য কখন কোনটি ব্যবহার করতে হবে তা বর্ণনা করা হয়েছে।
সিস্টেমের চিহ্ন

সিস্টেম ট্রেস হলো একটি শক্তিশালী প্রোফাইল, যাতে প্রসেস, থ্রেড, টাইমিং তথ্য, সিপিইউ ও টাস্ক এক্সিকিউশন এবং সিস্টেম বা ব্যবহারকারী-সংজ্ঞায়িত ইভেন্ট সম্পর্কিত তথ্য থাকে।
অ্যাপের দৃষ্টিকোণ থেকে, ট্রেসে থাকা তথ্যের প্রকৃতি ল্যাটেন্সি, জ্যাঙ্ক, মেমরি, ব্যাটারি এবং আরও অনেক কিছু সহ বিস্তৃত ক্ষেত্র জুড়ে থাকতে পারে।
সিস্টেম ট্রেসে নিম্নলিখিত কোড-চালিত ইভেন্টগুলো থাকে, যেগুলো সিস্টেম-সংজ্ঞায়িত বা ব্যবহারকারী-সংজ্ঞায়িত হতে পারে। কোড-চালিত ইভেন্ট হলো সেইসব ইভেন্ট যা ব্যবহারকারীরা ফাংশন কলের মাধ্যমে ঘটাতে পারে।
- ট্রেস স্লাইস: আপনার কোডের বিভিন্ন বিন্দুর মধ্যবর্তী সময়কে নির্দেশ করে।
Trace.beginSectionএবংTrace.endSectionAPI ব্যবহার করে এগুলো যোগ করা যায়। - ট্রেস কাউন্টার: সংখ্যাসূচক মান যা মেট্রিক্স উপস্থাপন করে, যেমন হিপ সাইজ। এগুলো
Trace.setCounterAPI ব্যবহার করে যোগ করা যায়।
সিস্টেম ট্রেসে মেট্রিকও থাকে, যা PerfettoSQL কোয়েরি থেকে তৈরি করা যায় এবং বিশ্লেষণ করতে বা ট্রেস তুলনা করতে ব্যবহার করা যেতে পারে।
আমরা নিম্নলিখিত কাজগুলো সম্পাদনের জন্য সিস্টেম ট্রেস ব্যবহার করার পরামর্শ দিই:
লেটেন্সি সমস্যা নির্ণয় করুন। বিলম্ব, অপেক্ষা বা শিডিউলিং সমস্যার কারণে সৃষ্ট লেটেন্সি সমস্যা খুঁজে বের করার জন্য সিস্টেম ট্রেস চমৎকার। স্যাম্পল-ভিত্তিক প্রোফাইলের মতো অন্যান্য প্রোফাইলারগুলো সিস্টেম ট্রেসের মতো টাইমিং তথ্য প্রদান করে না।
পুনরাবৃত্ত গণনা খুঁজুন। ট্রেসিংয়ের মাধ্যমে জানা যায় কোনো নির্দিষ্ট গণনার পুনরাবৃত্তি হচ্ছে কিনা, যা অপ্রয়োজনীয় কার্যক্রমের ইঙ্গিত দিতে পারে।
লক কনটেনশন সমস্যা নির্ণয় করুন। থ্রেডের অবস্থা এবং স্লাইস সম্পর্কিত তথ্যের মাধ্যমে, যা রিসোর্স কখন ব্লক হচ্ছে তা দেখায়, আপনি শনাক্ত করতে পারবেন যে লক (যেমন
synchronizedব্লক) ব্যবহারকারীর কার্যক্রমে বিলম্ব ঘটাচ্ছে কিনা।আপনার অ্যাপে মাল্টি-থ্রেডিং বুঝুন। ট্রেস একাধিক থ্রেডের একটি চিত্র প্রদান করে, যা প্রতিটি থ্রেডের অবস্থা এবং সিস্টেম বা আপনার অ্যাপ দ্বারা যুক্ত করা যেকোনো ট্রেস স্লাইস দেখায়। এই মাল্টি-থ্রেড ভিউ আপনাকে বুঝতে সাহায্য করে যে কোন থ্রেডগুলো সক্রিয়, কোনগুলো নিষ্ক্রিয়, অথবা তারা কী চালাচ্ছে এবং কীভাবে একে অপরের সাথে কাজ করছে।
জটিল পারফরম্যান্স বিশ্লেষণ সম্পাদন করুন। এর শক্তিশালী ইউজার ইন্টারফেস এবং বিভিন্ন ধরনের তথ্য প্রদর্শনের ক্ষমতা সিস্টেম ট্রেসকে ল্যাটেন্সি, মেমরি ও ব্যাটারি ব্যবহার সহ বিস্তৃত পারফরম্যান্স সমস্যা ডিবাগ করার জন্য উপযোগী করে তোলে।
সিস্টেম ট্রেস PerfettoSQL ব্যবহার করে কোয়েরি করাও সমর্থন করে। এই শক্তিশালী বৈশিষ্ট্যটি আপনাকে নিম্নলিখিত কাজগুলো করতে দেয়:
- নির্দিষ্ট ডেটা নিষ্কাশন করুন।
- ট্রেস ডেটাকে কাস্টম মেট্রিক্সে রূপান্তর করুন।
- পারফেটটো UI-তে আপনার সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলো সহজে দেখার জন্য কোয়েরি থেকে ডিবাগ ট্র্যাক তৈরি করুন।
- সরাসরি পারফেটটো UI-এর মধ্যেই জটিল বিশ্লেষণ সম্পাদন করুন।
স্ট্যাক নমুনা প্রোফাইল

যখন কোনো থ্রেড সিপিইউ-তে বিভিন্ন কাজ চালায়, তখন স্ট্যাক স্যাম্পল প্রোফাইল একটি নির্দিষ্ট হারে কোড এক্সিকিউশনের নমুনা রেকর্ড করে এবং কল স্ট্যাকের তথ্য সংরক্ষণ করে। এর মাধ্যমে আপনার কোড এক্সিকিউশনের সময় কী করছে, সে সম্পর্কে ধারণা পাওয়া যায়।
আমরা নিম্নলিখিত কাজগুলো করার জন্য স্ট্যাক স্যাম্পল ব্যবহার করার পরামর্শ দিই:
- হটস্পটগুলো অপ্টিমাইজ করুন। স্ট্যাক স্যাম্পল আপনার কোডের সেই অংশগুলো শনাক্ত করতে সাহায্য করে যেখানে প্রচুর সিপিইউ অ্যাক্টিভিটি হয়, যার অর্থ হলো থ্রেডটি প্রায়শই একটি "রানিং" অবস্থায় থাকে।
- কোড এক্সিকিউশন বুঝুন। স্ট্যাক স্যাম্পল আপনাকে আপনার কোডবেসের সামগ্রিক আচরণ বুঝতে সাহায্য করতে পারে।
- যে কোড চালানো উচিত নয়, তা শনাক্ত করুন। আপনি এমন কল স্ট্যাক খুঁজে পেতে পারেন যা আদৌ চলার কথা ছিল না, যা অপটিমাইজেশনের জন্য তাৎক্ষণিক সুযোগের ইঙ্গিত দেয়।
হিপ ডাম্প

জাভা হিপ ডাম্প আপনার অ্যাপের জাভা হিপ মেমরির একটি স্ন্যাপশট দেখায়। এই স্ন্যাপশটে ডাম্পটি নেওয়ার সময়কার সমস্ত অবজেক্ট এবং তারা একে অপরকে কীভাবে নির্দেশ করে, তা অন্তর্ভুক্ত থাকে।
আমরা নিম্নলিখিত কাজগুলো করার জন্য হিপ ডাম্প সংগ্রহ করার পরামর্শ দিই:
- ডুপ্লিকেট অবজেক্টগুলো খুঁজে বের করুন। হিপ ডাম্প সক্রিয় অবজেক্টের সংখ্যা দেখায়, যা ডুপ্লিকেট অবজেক্ট ট্র্যাক করার জন্য সহায়ক। এগুলি অবজেক্ট রেফারেন্সও প্রদান করে, যা অবজেক্টগুলো কোডের ঠিক কোন স্থানে তৈরি হয়েছিল তা শনাক্ত করতে সাহায্য করে।
- মেমরি লিক খুঁজে বের করুন। হিপ ডাম্প এমন মেমরি প্রকাশ করতে পারে যা ডাম্পটি নেওয়ার সময় আর ব্যবহৃত হওয়ার কথা নয়, যা সম্ভাব্য মেমরি লিকের ইঙ্গিত দেয়।
- অপ্টিমাইজ করা যেতে পারে এমন অবজেক্টগুলো শনাক্ত করুন। যেসব অবজেক্ট বেশি মেমরি ব্যবহার করে এবং সেগুলোর সংখ্যা দেখানোর মাধ্যমে, হিপ ডাম্প অদক্ষ মেমরি ব্যবহারের ধরণ শনাক্ত করতে সাহায্য করে।
হিপ প্রোফাইল

হিপ প্রোফাইল নেটিভ এবং জাভা উভয় সংস্করণেই পাওয়া যায় এবং মেমরি সংক্রান্ত সমস্যা ডিবাগ করার জন্য এগুলো চমৎকার। এগুলো কল স্ট্যাক স্যাম্পলের মতোই, তবে সিপিইউ সাইকেল পরিমাপ করার পরিবর্তে, মেমরি বরাদ্দ করার সময় স্যাম্পল সংগ্রহ করে।
আমরা নিম্নলিখিত কাজগুলো সম্পন্ন করার জন্য হিপ প্রোফাইল ব্যবহার করার পরামর্শ দিই:
- মেমোরি চর্ন কমান। হিপ প্রোফাইল মেমোরি অ্যালোকেশনের জন্য কোডের অবস্থানসহ নমুনা প্রদান করে। এটি আপনাকে সেইসব এলাকা শনাক্ত করতে সাহায্য করে যেখানে প্রচুর টেম্পোরারি অবজেক্ট তৈরি হয়, যা আপনার অ্যাপে ঘন ঘন গার্বেজ কালেকশন (GC) হওয়ার কারণ হতে পারে।
- মেমরি লিক শনাক্ত করুন। মেমরি লিক নির্ণয় ও সমাধান করার জন্য হিপ প্রোফাইল অন্যান্য মেমরি প্রোফাইলের সাথে ব্যবহার করা যেতে পারে। এগুলো আপনাকে এমন স্থানগুলো চিহ্নিত করতে সাহায্য করে, যেখানে প্রত্যাশার চেয়ে উল্লেখযোগ্যভাবে বেশি মেমরি বরাদ্দ করা হচ্ছে।
প্রোফাইল একত্রিত করুন
প্রায়শই, আপনি একটিমাত্র প্রোফাইল ব্যবহার করে পারফরম্যান্স বিশ্লেষণ করবেন। তবে, একাধিক প্রোফাইল বা একটি একক সমন্বিত প্রোফাইল সংগ্রহ করলে প্রায়শই একটি আরও সম্পূর্ণ চিত্র পাওয়া যায় এবং এমন জটিল সমস্যা নির্ণয়ে সাহায্য করে যা কেবল একটি প্রোফাইল দিয়ে সম্ভব নয়।
এই পরিস্থিতিগুলো বিবেচনা করুন যেখানে প্রোফাইল একত্রিত করা সুবিধাজনক:
দৃশ্যকল্প ১: ইনস্ট্রুমেন্টেশনবিহীন কোড তদন্ত করা। একটি সিস্টেম ট্রেস এমন অপারেশনগুলির জন্য লেটেন্সি দেখাতে পারে যা আপনি ইতিমধ্যেই ইনস্ট্রুমেন্ট করেছেন। তবে, সেই সময়গুলিতে চলমান আপনার কোডের ইনস্ট্রুমেন্টেশনবিহীন অংশগুলি সম্পর্কে আপনার আরও তথ্যের প্রয়োজন হতে পারে। তদন্ত করার জন্য, সম্পাদিত কোডটি বোঝার জন্য একটি কল স্ট্যাক প্রোফাইল নিন। এই তথ্যটি পরবর্তীতে আরও ট্রেস স্লাইস যোগ করে আপনার ট্রেসিং উন্নত করতে সাহায্য করতে পারে।
দৃশ্যকল্প ২: মেমরি লিক এবং গার্বেজ কালেকশন বিশ্লেষণ। কল্পনা করুন, একটি সিস্টেম ট্রেস দেখাচ্ছে যে অ্যালোকেশনের কারণে জাভা হিপ মেমরি ক্রমাগত বাড়ছে, যা ঘন ঘন গার্বেজ কালেকশন (GC) ঘটাচ্ছে। অ্যালোকেট করা অবজেক্টগুলো বোঝার জন্য, একটি হিপ প্রোফাইল বা একটি হিপ ডাম্প নিন। এই সম্মিলিত পদ্ধতিটি আপনাকে মেমরি ব্যবহার কমানোর উপায় শনাক্ত করতে সাহায্য করে। উদাহরণস্বরূপ, ক্যাশিং ব্যবহার করে অপচয়মূলক বা অপ্টিমাইজযোগ্য অ্যালোকেশন কমালে GC ঘটা প্রতিরোধ করা যেতে পারে।