Instruments — এটি Xcode-এ নির্মিত একটি প্রোফাইলার যা iOS, macOS, tvOS এবং watchOS অ্যাপ্লিকেশনের পারফরম্যান্স বিশ্লেষণের জন্য ব্যবহৃত হয়। টুলটি রিয়েল টাইমে CPU, মেমরি, নেটওয়ার্ক, গ্রাফিক্স এবং পাওয়ার খরচ পরিমাপের জন্য টেমপ্লেটের একটি সেট প্রদান করে। Apple Developer Documentation অনুসারে, Instruments ডেভেলপমেন্টের সকল ধাপে ব্যবহৃত হয় — লিক খোঁজা থেকে শুরু করে অ্যাপ্লিকেশন স্টার্টআপ টাইম অপ্টিমাইজ করা পর্যন্ত।
মূল বিষয়
Instruments — এটি একটি প্রোফাইলিং এবং ট্রেসিং সিস্টেম যা Xcode-এর অংশ এবং Sun Microsystems দ্বারা উন্নত DTrace প্রযুক্তির উপর ভিত্তি করে তৈরি। Instruments একটি ইউনিফাইড ইন্টারফেসে কয়েক ডজন প্রোফাইলিং টুল (টেমপ্লেট) একত্রিত করে: শুধু একটি টেমপ্লেট নির্বাচন করুন, Xcode-এর মাধ্যমে অ্যাপ্লিকেশন চালু করুন এবং ডেটা সংগ্রহ শুরু করুন।
Instruments-এর আর্কিটেকচার ক্লায়েন্ট-সার্ভার মডেলের উপর নির্মিত: ডিভাইসের এজেন্ট ডেটা সংগ্রহ করে এবং USB সংযোগের মাধ্যমে Mac-এ পাঠায়। এটি প্রোফাইলারের প্রভাব অ্যাপ্লিকেশনের পারফরম্যান্সের উপর ন্যূনতম করে — Instruments প্রধানত হোস্টের পাশে কাজ করে। WWDC 2022 অনুসারে, 1 ms স্যাম্পলিং রেটে Time Profiler-এর ওভারহেড 3% এর কম।
Instruments কাস্টম টেমপ্লেট সমর্থন করে — ডেভেলপার একটি প্রোফাইলিং সেশনে একাধিক টুল একত্রিত করতে পারে। উদাহরণস্বরূপ, একসাথে Time Profiler + Allocations + Leaks চালু করুন এবং CPU পিক এবং মেমরি অ্যালোকেশনের মধ্যে সম্পর্ক দেখুন। এটি পারফরম্যান্সের একটি সম্পূর্ণ চিত্র দেয় যা প্রতিটি উপাদানের বিচ্ছিন্ন বিশ্লেষণের মাধ্যমে পাওয়া যায় না।
Xcode-এ ১৬টি প্রি-ইনস্টল করা Instruments টেমপ্লেট রয়েছে: Time Profiler, Allocations, Leaks, Energy Log, Network, Core Animation, Metal System Trace, File Activity, System Trace এবং অন্যান্য। প্রতিটি টেমপ্লেট একটি নির্দিষ্ট কাজের জন্য অপ্টিমাইজ করা এবং সঠিক ট্রিগার এবং ফিল্টার সেটিংস সহ প্রি-কনফিগার করা।
Time Profiler — সবচেয়ে বেশি ব্যবহৃত Instruments টেমপ্লেট। এটি কল স্ট্যাক স্যাম্পলিং-এর ভিত্তিতে কাজ করে: প্রতি ১-১০ মিলিসেকেন্ডে সিস্টেম অ্যাপ্লিকেশনের সব থ্রেডের কল স্ট্যাক রেকর্ড করে। সেশন বন্ধ করার পর Instruments স্যাম্পল যোগ করে এবং দেখায় কোন মেথড এবং ফাংশন সবচেয়ে বেশি সময় নিয়েছে। ফলাফল Call Tree আকারে উপস্থাপিত হয় — Self Weight অনুসারে সাজানো কলের গাছ।
Time Profiler-এর মূল মেট্রিক — Self Weight (মেথডে সরাসরি ব্যয় করা সময়, চাইল্ড মেথড কল বাদ দিয়ে)। Self Weight-ই দেখায় কোন ফাংশন আসলে প্রসেসর লোড করছে। Weight (চাইল্ড মেথড সহ মোট সময়) বিভ্রান্তিকর হতে পারে: উচ্চ Weight সম্পন্ন একটি মেথড হয়তো আরেকটি ধীর মেথড কল করছে, কিন্তু নিজে দ্রুত।
import UIKit
class ImageGalleryViewController: UIViewController {
// Time Profiler দেখাবে যে cellForItemAt-এর Self Weight = 40%
// এর ভিতরে decodeImage 35% নিচ্ছে — এটি বাধা
func collectionView(
_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath
) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(
withReuseIdentifier: "ImageCell",
for: indexPath
) as! ImageCell
// ❌ decodeImage — বাধা (Self Weight = 35%)
cell.imageView.image = UIImage(contentsOfFile: imagePath)
return cell
}
}
Time Profiler বিশ্লেষণ করার সময় com.apple.main-thread-এ চলমান মেথডগুলিতে মনোযোগ দিন। যদি মূল থ্রেডে Self Weight প্রতি ফ্রেমে 16 ms থ্রেশহোল্ড অতিক্রম করে — UI ধীর হবে। এই সমস্যার সমাধান — Grand Central Dispatch (GCD) ব্যবহার করে ইমেজ ডিকোডিং, লেআউট গণনা এবং ডেটা প্রসেসিং মূল থ্রেড থেকে ব্যাকগ্রাউন্ড থ্রেডে স্থানান্তর করা।
Call Tree — এটি Self Weight অনুসারে সাজানো সকল মেথড কলের একটি হায়ারার্কিক্যাল উপস্থাপনা। Call Tree-তে সবচেয়ে ভারী মেথড — প্রথম লাইন। লাইনটি প্রসারিত করলে আপনি দেখতে পাবেন এই মেথডটি কোন চাইল্ড মেথড কল করেছে এবং তারা কত সময় নিয়েছে। এমন মেথড খুঁজুন যেখানে Self Weight (নিজস্ব সময়) Weight (মোট সময়) থেকে উল্লেখযোগ্যভাবে বেশি — এটি সিনক্রোনাস ব্লকিং এবং অপেক্ষার লক্ষণ।
Allocations — এটি অ্যাপ্লিকেশনের সকল মেমরি অ্যালোকেশন পর্যবেক্ষণের টুল। এটি দেখায় কোন অবজেক্ট, কত সংখ্যায় এবং কত মোট আকারে প্রতিটি মুহূর্তে তৈরি হচ্ছে। Android Studio-র Memory Profiler-এর বিপরীতে, Allocations Heapshot সমর্থন করে — দুটি স্ন্যাপশট তুলনা করার ক্ষমতা সহ লাইভ অবজেক্টের তাৎক্ষণিক স্ন্যাপশট।
Allocations-এর ইন্টারফেস দুটি প্রধান সেকশন নিয়ে গঠিত: All Allocations (সব ধরনের অবজেক্টের মোট পরিসংখ্যান) এবং Call Trees (অবজেক্ট তৈরি করা মেথড অনুযায়ী কল ট্রি)। লিক খোঁজার জন্য Heapshot Analysis ব্যবহার করুন: একটি সিনারিও চালানোর আগে স্ন্যাপশট নিন, সিনারিও চালান, পরে স্ন্যাপশট নিন — এবং তুলনা করুন কোন নতুন অবজেক্ট মেমোরিতে রয়ে গেছে।
Apple Developer Documentation অনুসারে, Allocations-এর মাধ্যমে সবচেয়ে সাধারণ লিক প্যাটার্ন — কালেকশন স্ক্রোল করার সময় UIView এবং CALayer-এর অতিরিক্ত তৈরি। যদি প্রতিটি স্ক্রোলের সময় লাইভ UIView-এর সংখ্যা বাড়ে, কিন্তু কালেকশন সেল পুনরায় ব্যবহার করে — কোথাও পুরানো ভিউ মুক্তি না দিয়ে অতিরিক্ত ভিউ তৈরি হচ্ছে। Allocations দেখায় এই ভিউগুলি কোথায় তৈরি হচ্ছে তার সঠিক কল স্ট্যাক।
| প্যারামিটার | বিবরণ | কী দেখতে হবে |
|---|---|---|
| # Living | এই ধরনের জীবিত অবজেক্টের সংখ্যা | সিনারিও পুনরাবৃত্তি করার সময় স্থিতিশীল থাকা উচিত |
| # Transient | নির্দিষ্ট সময়ে তৈরি এবং মুক্তি পাওয়া অবজেক্ট | হঠাৎ স্পাইক — অতিরিক্ত অ্যালোকেশনের লক্ষণ |
| Total Bytes | এই ধরনের মোট মেমরি আয়তন | ডিভাইসের মোট উপলব্ধ RAM-এর সাথে তুলনা করুন |
Heapshot — এটি Allocations-এ লাইভ অবজেক্টের তাৎক্ষণিক স্ন্যাপশট। সিনারিও চালানোর আগে Heapshot নিন, সিনারিও চালান এবং দ্বিতীয় Heapshot নিন। স্ন্যাপশটের পার্থক্য দেখাবে কোন অবজেক্ট তৈরি হয়েছে এবং মুক্তি পায়নি। আদর্শ ফলাফল — শুধু অস্থায়ী অবজেক্টের (Autorelease pool) বৃদ্ধি। সঠিক বিশ্লেষণের জন্য একটি সেশনে Allocations + Leaks কম্বিনেশন ব্যবহার করুন। Allocations দেখায় কোন অবজেক্ট মুক্তি পাচ্ছে না, এবং Leaks — কেন (কোন শক্তিশালী রেফারেন্স তাদের ধরে রেখেছে)। লিক সন্দেহ হলে প্রতিবার ডাবল সেশন চালান।
Leaks — এটি iOS এবং macOS অ্যাপ্লিকেশনে মেমরি লিক সনাক্তকরণের জন্য একটি বিশেষায়িত টুল। Allocations-এর বিপরীতে, যা শুধু অ্যালোকেশন দেখায়, Leaks সক্রিয়ভাবে হিপ স্ক্যান করে retain cycles খোঁজে — এমন পরিস্থিতি যেখানে দুই বা ততোধিক অবজেক্ট পরস্পরকে শক্তিশালী রেফারেন্স দিয়ে ধরে রেখেছে।
Leaks Cycles & Roots-এর সাথে কাজ করে — অবজেক্ট রিটেনশন গ্রাফের ভিজুয়ালাইজার। যখন লিক সনাক্ত হয়, Leaks চক্রের সব অবজেক্ট, তাদের retain count এবং রেফারেন্স পাস হওয়ার সঠিক ফিল্ড দেখায়। ডেভেলপারকে শুধু গ্রাফ দেখে বুঝতে হবে কোন রেফারেন্সটি weak দিয়ে প্রতিস্থাপন করতে হবে।
টুলটি স্বয়ংক্রিয়ভাবে টাইমলাইনে লাল মার্কার দিয়ে লিক হাইলাইট করে। Leaks রিয়েল টাইমে কাজ করে: সিস্টেম লিক সনাক্ত করার সাথে সাথেই ডেভেলপারকে সংকেত দেয়। এটি ডাম্প এবং পোস্ট-অ্যানালাইসিসের অপেক্ষা না করে “স্থানেই” সমস্যা সমাধানের সুযোগ দেয়।
WWDC 2022 অনুসারে, Leaks জটিল মাল্টি-লেভেল retain cycles সনাক্ত করতে সক্ষম — উদাহরণস্বরূপ, তিন বা ততোধিক অবজেক্ট শক্তিশালী রেফারেন্সের একটি বন্ধ চেইন গঠন করলে। এই ধরনের চক্র নির্ণয়ের জন্য Cycles & Roots গ্রাফ অপরিহার্য: এটি স্পষ্টভাবে দেখায় কীভাবে অবজেক্টগুলি একে অপরের উপর নির্ভরশীল।
গ্রাফের প্রতিটি নোড — একটি অবজেক্ট, প্রতিটি তীর — একটি শক্তিশালী রেফারেন্স। চক্র — তীরগুলির একটি বন্ধ লুপ। নোডের রঙ অবস্থা দেখায়: লাল — লিক হওয়া অবজেক্ট, সবুজ — মূল (GC Root), ধূসর — মধ্যবর্তী অবজেক্ট। লিক সমাধান করতে, এমন একটি তীর খুঁজুন যা লজিক না ভেঙে weak করা যেতে পারে — এবং কোডে রেফারেন্সের ধরন পরিবর্তন করুন।
Energy Log — এটি অ্যাপ্লিকেশনের পাওয়ার খরচ পরিমাপের জন্য Instruments টেমপ্লেট। এটি ডিভাইসের হার্ডওয়্যার সেন্সর থেকে ডেটা সংগ্রহ করে: CPU লোড, Wi-Fi এবং সেলুলার রেডিও অবস্থা, GPS ব্যবহার, ডিসপ্লে এবং Bluetooth। Energy Log দেখায় অ্যাপ্লিকেশনের কোন অপারেশন সবচেয়ে বেশি ব্যাটারি খরচ করে এবং সেগুলিকে টাইম স্কেলে পাওয়ার খরচ গ্রাফে দেখায়।
টুলটি শক্তি খরচের স্তর অনুসারে অপারেশন শ্রেণীবদ্ধ করে: নিম্ন (সাধারণ প্রসেসর কাজ), মাঝারি (Wi-Fi ট্রান্সমিশন), উচ্চ (GPS, মোবাইল নেটওয়ার্ক, GPU)। যদি Energy Log দীর্ঘ সময় ধরে উচ্চ স্তরের লাল সূচক দেখায় — অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে ব্যাটারি নিঃশেষ করছে এবং ব্যবহারকারী এটি মুছে ফেলবে।
Energy Log দ্বারা সনাক্ত সাধারণ সমস্যা: সময়সীমা ছাড়া WakeLock (অ্যাপ্লিকেশন কাজ শেষ হওয়ার পরেও প্রসেসর সক্রিয় রাখে), ব্যাকগ্রাউন্ডে উচ্চ নির্ভুলতা সহ Location Updates (প্রতি কয়েক সেকেন্ডে অবস্থান অনুরোধ), নেটওয়ার্ক সেশন অসঙ্গতি (সার্ভারে ঘন ঘন পুনঃসংযোগ)। Energy Log প্রতিটি এমন ঘটনা রেকর্ড এবং শক্তি-নিবিড় অপারেশন বন্ধ করার শর্ত যোগ করার পরামর্শ দেয়।
পাওয়ার খরচ পরীক্ষার জন্য ব্যাটারি পাওয়ারে বাস্তব ডিভাইস ব্যবহার করুন — ইমুলেটরে পাওয়ার খরচের পরিসংখ্যান সঠিক নয়। CI-তে ব্যাটারি খরচ পরীক্ষা স্বয়ংক্রিয় করতে UI-টেস্টের সাথে Energy Log চালান।
Instruments চালু করা Xcode থেকে দুইভাবে করা যায়: Product → Profile (⌘I) মেনুর মাধ্যমে বা Launchpad থেকে আলাদা অ্যাপ্লিকেশন হিসেবে Instruments খুলে। প্রথম পদ্ধতিটি সুবিধাজনক: Xcode স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশনটি প্রোফাইলিং মোডে কম্পাইল করে এবং নির্বাচিত টেমপ্লেট সহ সংযুক্ত ডিভাইসে চালায়। সেশন বন্ধ করার পর Instruments ট্রেসিং .trace এক্সটেনশন সহ একটি ফাইলে সংরক্ষণ করে।
ফলাফলের ব্যাখ্যা টেমপ্লেটের উপর নির্ভর করে। Time Profiler-এর জন্য Self Weight অনুসারে সাজানো Call Tree দেখুন — উপরের মেথডগুলি আপনার প্রধান বাধা। Allocations-এর জন্য — চক্রাকার সিনারিওর পরে # Living দেখুন: যদি অবজেক্টের সংখ্যা বেড়ে যায় — লিক খুঁজুন। Leaks-এর জন্য — লাল মার্কার এবং Cycles & Roots গ্রাফ দেখুন। অপ্টিমাইজেশনের আগে এবং পরে ফলাফল তুলনা করুন — এটি পরিবর্তনের কার্যকারিতা নিশ্চিত করার একমাত্র উপায়।
// CI-তে Instruments-এর জন্য কমান্ড লাইন
// CI/CD pipeline-এ Instruments সংহতকরণ
import XCTest
class PerformanceTests: XCTestCase {
func testScrollPerformance() {
// কালেকশন স্ক্রোলের সময় মাপা
measure(metrics: [XCTCPUMetric(), XCTMemoryMetric()]) {
app.scrollToBottom()
}
}
}
CI-তে xcodebuild -showBuildSettings এবং xcrun xctrace এর মাধ্যমে কমান্ড লাইন থেকে Instruments চালানো যায়। এটি প্রতিটি commit-এ প্রোফাইলিং স্বয়ংক্রিয় করতে এবং রিগ্রেশন মিস না করতে সাহায্য করে। বিশ্লেষণের জন্য Baseline-তুলনা ব্যবহার করুন: যদি মেট্রিক পূর্ববর্তী commit-এর তুলনায় ৫% খারাপ হয় — পাইপলাইন বন্ধ হওয়া উচিত।
Instruments নিয়ে কাজ করার সময় প্রধান ভুল: ডিভাইসের পরিবর্তে সিমুলেটরে প্রোফাইলিং (CPU এবং GPU ডেটা সঠিক নয়), সিনারিও ছাড়া ডেটা সংগ্রহ (ফলাফল এলোমেলো), Call Tree উপেক্ষা (শুধু গ্রাফ দেখা, নির্দিষ্ট মেথড না দেখা)। এই ভুলগুলি সংশোধন করলে প্রোফাইলিংয়ের ৮০% গুণমান পাওয়া যায়।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
হ্যাঁ, Instruments সম্পূর্ণভাবে SwiftUI সমর্থন করে। UI-পারফরম্যান্স বিশ্লেষণের জন্য Core Animation টেমপ্লেট ব্যবহার করুন — এটি ফ্রেম রেন্ডারিং গতি দেখায় এবং View-এর অপ্রয়োজনীয় পুনঃরেন্ডারিং সনাক্ত করে। Time Profiler এবং Allocations SwiftUI-এর সাথেও সীমাবদ্ধতা ছাড়া কাজ করে।
Instruments — এটি পুরো Apple ইকোসিস্টেমের জন্য একটি সার্বজনীন প্রোফাইলার যা CPU, মেমরি, নেটওয়ার্ক, গ্রাফিক্স এবং পাওয়ার খরচ কভার করে। Shark — এটি LeakCanary-র অভ্যন্তরীণ হিপ ডাম্প বিশ্লেষক যা শুধুমাত্র Android-এ মেমরি লিক খোঁজায় বিশেষায়িত।
Instruments অ্যাপ্লিকেশনের কোডে এম্বেড হয় না — এটি একটি বাহ্যিক টুল যা Xcode-এর মাধ্যমে চলমান প্রক্রিয়ার সাথে সংযুক্ত হয়। কোডে কোনো পরিবর্তন আনার প্রয়োজন নেই। .trace ফাইলগুলি শুধু লগ যা বাইনারিতে অন্তর্ভুক্ত হয় না।
স্ট্যান্ডার্ড 1 ms স্যাম্পলিং রেটে Time Profiler-এর ওভারহেড ৩% এর কম। সঠিক ট্রেসিং মোডে (প্রতি ফাংশন কল) ওভারহেড ২০-৩০% পর্যন্ত পৌঁছাতে পারে, তাই দৈনন্দিন প্রোফাইলিংয়ের জন্য স্যাম্পলিং ব্যবহার করা হয়। সঠিক ট্রেসিং শুধু ক্রিটিক্যাল অংশের জন্য প্রয়োজন।
ফলাফল স্বয়ংক্রিয়ভাবে প্রজেক্ট ফোল্ডারে .trace ফাইলে সংরক্ষিত হয়। যৌথ বিশ্লেষণের জন্য ফাইলটি অন্য Mac-এ Xcode দিয়ে খোলা যেতে পারে। টেক্সট ফরম্যাটে এক্সপোর্টের জন্য xcrun xctrace export --input file.trace --output result.xml ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন