প্রোফাইলের ধরন এবং প্রতিটি কখন সহায়ক

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

এই নথিতে সবচেয়ে কার্যকর ধরণের প্রোফাইল এবং সাধারণ কর্মক্ষমতা সমস্যাগুলি ডিবাগ করার জন্য কখন প্রতিটি ব্যবহার করতে হবে তা বর্ণনা করা হয়েছে।

সিস্টেম ট্রেস

সিস্টেম ট্রেস উদাহরণ
চিত্র ১ : সিস্টেম ট্রেস উদাহরণ।

একটি সিস্টেম ট্রেস হল একটি শক্তিশালী প্রোফাইল যাতে প্রক্রিয়া, থ্রেড, সময় সংক্রান্ত তথ্য, CPU এবং টাস্ক এক্সিকিউশন এবং সিস্টেম বা ব্যবহারকারী-সংজ্ঞায়িত ইভেন্ট সম্পর্কে তথ্য থাকে।

অ্যাপের দৃষ্টিকোণ থেকে, ট্রেসে থাকা তথ্যের প্রকৃতি ল্যাটেন্সি, জ্যাঙ্ক, মেমরি, ব্যাটারি এবং আরও অনেক কিছু সহ বিস্তৃত ক্ষেত্র জুড়ে থাকতে পারে।

সিস্টেম ট্রেসগুলিতে নিম্নলিখিত কোড-চালিত ইভেন্টগুলি থাকে যা সিস্টেম বা ব্যবহারকারী দ্বারা নির্ধারিত হতে পারে। কোড-চালিত ইভেন্টগুলি হল এমন ইভেন্ট যা ব্যবহারকারীরা ফাংশন কলের মাধ্যমে ট্রিগার করতে পারে।

  • ট্রেস স্লাইস: আপনার কোডের বিভিন্ন পয়েন্টের মধ্যে সময় নির্দেশ করে। এগুলি Trace.beginSection এবং Trace.endSection API গুলির মাধ্যমে যোগ করা যেতে পারে।
  • ট্রেস কাউন্টার: সংখ্যাসূচক মান যা মেট্রিক্স উপস্থাপন করে, উদাহরণস্বরূপ হিপ সাইজ। এগুলি Trace.setCounter API এর মাধ্যমে যোগ করা যেতে পারে।

সিস্টেম ট্রেসে এমন মেট্রিক্সও থাকে যা PerfettoSQL কোয়েরি থেকে তৈরি করা যেতে পারে এবং বিশ্লেষণ করতে বা ট্রেস তুলনা করতে ব্যবহার করা যেতে পারে।

নিম্নলিখিত কাজগুলি সম্পাদনের জন্য আমরা সিস্টেম ট্রেস ব্যবহার করার পরামর্শ দিচ্ছি:

  • ল্যাটেন্সি সমস্যা নির্ণয় করুন। বিলম্ব, অপেক্ষা, বা সময়সূচীর সমস্যার কারণে সৃষ্ট ল্যাটেন্সি সমস্যা খুঁজে বের করার জন্য সিস্টেম ট্রেসগুলি দুর্দান্ত। অন্যান্য প্রোফাইলার, যেমন নমুনা-ভিত্তিক প্রোফাইল, সিস্টেম ট্রেস যে টাইমিং তথ্য প্রদান করে তা প্রদান করে না।

  • ডুপ্লিকেট করা গণনাগুলি খুঁজুন। ট্রেসিং করলে দেখা যাবে যে নির্দিষ্ট কিছু গণনা পুনরাবৃত্তি হচ্ছে কিনা, যা অপ্রয়োজনীয় ক্রিয়াকলাপ নির্দেশ করতে পারে।

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

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

  • জটিল কর্মক্ষমতা বিশ্লেষণ সম্পাদন করুন। শক্তিশালী ইউজার ইন্টারফেস এবং বিভিন্ন ধরণের তথ্য প্রদর্শনের ক্ষমতা সিস্টেম ট্রেসগুলিকে ল্যাটেন্সি, মেমরি এবং ব্যাটারি ব্যবহার সহ বিস্তৃত কর্মক্ষমতা সমস্যাগুলি ডিবাগ করার জন্য কার্যকর করে তোলে।

সিস্টেম ট্রেসগুলি PerfettoSQL ব্যবহার করে কোয়েরি করাও সমর্থন করে। এই শক্তিশালী বৈশিষ্ট্যটি আপনাকে এগুলি করতে দেয়:

  • নির্দিষ্ট তথ্য বের করুন।
  • ট্রেস ডেটাকে কাস্টম মেট্রিক্সে রূপান্তর করুন।
  • Perfetto UI-তে আপনার সবচেয়ে বেশি পছন্দের জিনিসগুলি কল্পনা করা সহজ করার জন্য কোয়েরিগুলি থেকে ডিবাগ ট্র্যাক তৈরি করুন।
  • Perfetto UI এর মধ্যে সরাসরি জটিল বিশ্লেষণ সম্পাদন করুন।

নমুনা প্রোফাইল স্ট্যাক করুন

স্ট্যাক নমুনা প্রোফাইলের উদাহরণ
চিত্র ২। : স্ট্যাক নমুনা প্রোফাইলের উদাহরণ।

স্ট্যাক স্যাম্পল প্রোফাইল কোড এক্সিকিউশনের নমুনা রেকর্ড করে এবং একটি থ্রেড CPU-তে কাজ চালানোর সময় একটি নির্দিষ্ট হারে কল স্ট্যাক তথ্য সংরক্ষণ করে কাজ করে। এটি এক্সিকিউশনের সময় আপনার কোড কী করছে তার অন্তর্দৃষ্টি প্রদান করে।

আমরা নিম্নলিখিত কাজগুলি করার জন্য স্ট্যাক নমুনা ব্যবহার করার পরামর্শ দিচ্ছি:

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

স্তূপীকৃত বস্তু

হিপ ডাম্পের উদাহরণ
চিত্র ৩ : হিপ ডাম্পের উদাহরণ।

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

আমরা নিম্নলিখিত কাজগুলি করার জন্য হিপ ডাম্প সংগ্রহ করার পরামর্শ দিচ্ছি:

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

হিপ প্রোফাইল

হিপ প্রোফাইলের উদাহরণ
চিত্র ৪ : হিপ প্রোফাইলের উদাহরণ।

হিপ প্রোফাইলগুলি নেটিভ এবং জাভা উভয় সংস্করণেই পাওয়া যায় এবং মেমরি সমস্যাগুলি ডিবাগ করার জন্য দুর্দান্ত। এগুলি কল স্ট্যাক নমুনার মতো, তবে CPU চক্র পরিমাপ করার পরিবর্তে, মেমরি বরাদ্দ করার সময় তারা নমুনা নেয়।

নিম্নলিখিত কাজগুলি সম্পন্ন করার জন্য আমরা হিপ প্রোফাইল ব্যবহার করার পরামর্শ দিচ্ছি:

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

প্রোফাইল একত্রিত করুন

প্রায়শই, আপনি একটি একক প্রোফাইল ব্যবহার করে কর্মক্ষমতা বিশ্লেষণ করবেন। তবে, একাধিক প্রোফাইল বা একটি একক সম্মিলিত প্রোফাইল সংগ্রহ করা প্রায়শই আরও সম্পূর্ণ চিত্র প্রদান করতে পারে এবং জটিল সমস্যাগুলি নির্ণয় করতে সহায়তা করে যা একক প্রোফাইল একা করতে পারে না।

প্রোফাইল একত্রিত করা উপকারী এমন পরিস্থিতিতে বিবেচনা করুন:

  • দৃশ্যপট ১: আনইন্সট্রুমেন্টেড কোড তদন্ত করা। একটি সিস্টেম ট্রেস আপনার ইতিমধ্যেই ইন্সট্রুমেন্টেড অপারেশনের জন্য লেটেন্সি দেখাতে পারে। তবে, সেই সময়গুলিতে চলমান আপনার কোডের আনইন্সট্রুমেন্টেড অংশগুলি সম্পর্কে আরও তথ্যের প্রয়োজন হতে পারে। তদন্ত করার জন্য, কার্যকর করা কোডটি বুঝতে একটি কল স্ট্যাক প্রোফাইল নিন। এই তথ্যটি আরও ট্রেস স্লাইস যোগ করে আপনার ট্রেসিং উন্নত করতে সাহায্য করতে পারে।

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