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

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

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

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

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