Systrace एक Android सिस्टम ट्रेसिंग टूल है जो लिनक्स कर्नेल, CPU, GPU और सभी सिस्टम प्रक्रियाओं के बारे में थोड़े समय में डेटा एकत्र करता है। Traceview के विपरीत, जो एप्लिकेशन के अंदर विधियों पर ध्यान केंद्रित करता है, Systrace सिस्टम चित्र दिखाता है: प्रत्येक CPU कोर का लोड, SurfaceFlinger संचालन, Binder कॉल और GC चक्र। Google, 2024 के अनुसार, यह टूल ड्रॉप किए गए फ्रेम, बार-बार कचरा संग्रहण और UI थ्रेड में विसंगतियों के निदान के लिए अपरिहार्य है।
मुख्य बातें
Systrace Android SDK से एक कमांड-लाइन उपयोगिता है जो एकल HTML रिपोर्ट में कर्नेल ट्रेसिंग (ftrace) और उपयोगकर्ता स्थान (atrace) के कई स्रोतों से डेटा कैप्चर और मर्ज करती है। यह उपकरण Android 4.1 (Jelly Bean) में सिस्टम प्रोफाइलिंग के लिए पुरानी traceview उपयोगिता के प्रतिस्थापन के रूप में दिखाई दिया और लंबे समय तक Android प्लेटफॉर्म पर मानक प्रदर्शन निदान उपकरण बना रहा।
Systrace ftrace पर निर्भर करता है — एक लिनक्स कर्नेल ट्रेसिंग तंत्र जो Android संस्करण 4.1 से उपलब्ध है। जब Systrace शुरू होता है, यह निर्दिष्ट ट्रेस श्रेणियों को सक्रिय करता है: sched (कार्य अनुसूचक), freq (CPU आवृत्ति), idle (निष्क्रिय अवस्थाएं), workq (कार्य कतारें), binder, gfx और अन्य। डेटा कर्नेल के रिंग बफर में एकत्र किया जाता है और रुकने के बाद एक एकल trace.html फ़ाइल में मर्ज किया जाता है जिसे किसी भी ब्राउज़र में खोला जा सकता है।
Android Studio 3.1 से शुरू करके, Systrace CPU Profiler में बनाया गया है। “Trace System Calls” मोड में, प्रोफाइलर कनेक्टेड डिवाइस पर Systrace चलाता है और परिणाम सीधे Android Studio विंडो में प्रदर्शित करता है। यह बुनियादी मामलों के लिए कमांड लाइन के साथ काम करने की आवश्यकता को समाप्त करता है जबकि पूर्ण कार्यक्षमता — सभी ट्रेस श्रेणियां, फ़िल्टरिंग और इंटरैक्टिव टाइमलाइन — बनाए रखता है। ट्रेसिंग के दौरान डिवाइस प्रदर्शन नगण्य रूप से कम हो जाता है क्योंकि ftrace न्यूनतम ओवरहेड के लिए डिज़ाइन किया गया है।
Systrace डेटा संग्रह के दो तंत्रों का उपयोग करता है: सिस्टम ईवेंट के लिए कर्नेल स्तर पर ftrace और Android-विशिष्ट टैग के लिए उपयोगकर्ता स्थान में atrace। ftrace संदर्भ स्विच (sched_switch), CPU आवृत्ति परिवर्तन (cpu_frequency), इंटरप्ट (irq_handler_entry) और अन्य ईवेंट रिकॉर्ड करता है। atrace Android फ्रेमवर्क से टैग जोड़ता है — फ्रेम रेंडरिंग की शुरुआत और अंत, SurfaceFlinger कॉल और Binder लेनदेन।
Systrace की मुख्य विशेषता प्रत्येक फ्रेम की रेंडरिंग पाइपलाइन का विज़ुअलाइज़ेशन है: एप्लिकेशन → BufferQueue → SurfaceFlinger → HWC (कंपोज़र) → डिस्प्ले। यदि किसी चरण में देरी होती है, Systrace सटीक कारण दिखाता है: एप्लिकेशन ने समय पर बफर तैयार नहीं किया, SurfaceFlinger VSync की प्रतीक्षा कर रहा था, या HWC परतों को संयोजित नहीं कर सका। टाइमलाइन पर फ्रेम जीवनचक्र स्थिति के अनुसार रंग-कोडित है: हरा (समय पर), पीला (विलंबित), लाल (ड्रॉप)। यह विज़ुअलाइज़ेशन UI प्रदर्शन को अनुकूलित करने का प्राथमिक उपकरण है।
Systrace 20 से अधिक ट्रेस श्रेणियों का समर्थन करता है, प्रत्येक में संबंधित ईवेंट का एक सेट शामिल है। महत्वपूर्ण श्रेणियों में शामिल हैं: gfx (ग्राफिक्स रेंडरिंग), input (इनपुट प्रोसेसिंग), view (View सिस्टम), webview (WebView), power (बिजली खपत), hal (हार्डवेयर एब्स्ट्रक्शन लेयर)। गेम प्रोफाइलिंग के लिए, AGI (Android GPU Inspector) के माध्यम से GPU कमांड विवरण के साथ gfx श्रेणी उपयोगी है।
Systrace Android के लिए क्षमताओं का एक अद्वितीय सेट प्रदान करता है जो अन्य प्रोफाइलर में उपलब्ध नहीं हैं: सिस्टम टाइमलाइन, कर्नेल-स्तरीय मेट्रिक्स और स्वचालित समस्या का पता लगाना।
Systrace HTML रिपोर्ट में एक बहु-स्तरीय टाइमलाइन होती है जहां प्रत्येक लेन एक प्रक्रिया या थ्रेड से मेल खाती है। आप समय पैमाने पर ज़ूम इन और आउट कर सकते हैं, विवरण देखने के लिए ईवेंट पर क्लिक कर सकते हैं (अवधि, आरंभक प्रक्रिया, अतिरिक्त तर्क)। रंग कोडिंग तेज़ी से नेविगेट करने में मदद करती है: हरे ब्लॉक — प्रक्रिया चल रही है, नीले — प्रतीक्षा कर रही है, नारंगी — इंटरप्ट, सफेद — निष्क्रिय।
Systrace स्वचालित रूप से ट्रेस का विश्लेषण करता है और समस्या क्षेत्रों को इंगित करने वाले अलर्ट संदेश प्रदर्शित करता है। उदाहरण के लिए: “Buffer underrun — SurfaceFlinger को VSync से पहले बफर नहीं मिला” या “Long Binder transaction — थ्रेड Binder_1 में 42 ms”। प्रत्येक अलर्ट में टाइमलाइन के संबंधित अनुभाग का लिंक और समस्या को ठीक करने की सिफारिश होती है। यह मैन्युअल विश्लेषण के घंटे बचाता है और मैन्युअल लॉगिंग के बजाय Systrace का उपयोग करने का एक मुख्य कारण है।
डेवलपर Trace.beginSection और Trace.endSection API के माध्यम से Systrace ट्रेस में कस्टम टैग जोड़ सकते हैं। यह सीधे सिस्टम टाइमलाइन पर महत्वपूर्ण कोड अनुभागों के निष्पादन को ट्रेस करने की अनुमति देता है — उदाहरण के लिए, डेटा लोडिंग या लेआउट गणना की शुरुआत और अंत को चिह्नित करना। टैग एप्लिकेशन लेन पर अलग ब्लॉक के रूप में दिखाई देते हैं और सिस्टम ईवेंट के साथ दिखाई देते हैं।
| श्रेणी | डेटा | सामान्य उपयोग |
|---|---|---|
| sched | संदर्भ स्विच, निष्क्रिय अवस्थाएं | थ्रेड अवरोधन, प्रतिस्पर्धा |
| gfx | VSync, बफर तैयारी, HWC | फ्रेम ड्रॉप, jank |
| binder | Binder लेनदेन, विलंबता | IPC देरी, दूरस्थ कॉल |
| freq | CPU आवृत्ति, स्केलिंग गवर्नर | थ्रॉटलिंग, बिजली खपत |
| gfx + AGI | GPU कमांड, शेडर | गेम प्रदर्शन |
Systrace चलाना दो तरीकों से संभव है: Android Studio CPU Profiler (“Trace System Calls” मोड) के माध्यम से या platform-tools फ़ोल्डर से systrace.py Python स्क्रिप्ट का उपयोग करके कमांड लाइन के माध्यम से। प्रत्येक विधि के अपने उपयोग के मामले हैं।
डिवाइस कनेक्ट करें, Profiler खोलें (View → Tool Windows → Profiler), अपनी प्रक्रिया चुनें, CPU टैब पर जाएं, “Trace System Calls” मोड चुनें और Record पर क्लिक करें। 5–30 सेकंड के बाद, Stop पर क्लिक करें — Android Studio डिवाइस पर Systrace चलाएगा, पूरा होने की प्रतीक्षा करेगा और परिणाम लोड करेगा। सीमा: रिकॉर्डिंग केवल तभी संभव है जब Profiler खुला हो, जो लंबे परिदृश्यों या ऑटोमेशन के लिए असुविधाजनक है।
अधिक लचीले नियंत्रण के लिए, systrace.py स्क्रिप्ट का उपयोग करें। ट्रेस श्रेणियां, अवधि और आउटपुट फ़ाइल नाम निर्दिष्ट करें। उदाहरण: 10 सेकंड के लिए gfx, input और sched डेटा कैप्चर करना। चलाने के लिए Python 2.7+ और USB डिबगिंग सक्षम के साथ एक कनेक्टेड डिवाइस आवश्यक है। Android 12+ पर, Systrace को Perfetto से बदल दिया गया है — कमांड वही रहता है, लेकिन स्क्रिप्ट कॉल को perfetto पर रीडायरेक्ट करती है।
# systrace का मूल 10 सेकंड का रन
$ python systrace.py \
--time=10 \
-o trace.html \
gfx input sched
# UI विश्लेषण के लिए केवल gfx श्रेणी
$ python systrace.py \
--time=5 \
-t gfx \
-o ui_trace.html
अपने कोड को Systrace टाइमलाइन पर दिखाने के लिए, महत्वपूर्ण अनुभाग को Trace.beginSection / Trace.endSection से लपेटें। यह महत्वपूर्ण है कि beginSection और endSection सख्ती से युग्मित हों — अन्यथा Systrace गलत टाइमलाइन दिखाएगा। Kotlin में, अपवाद की स्थिति में भी सेक्शन क्लोजर की गारंटी के लिए इनलाइन एक्सटेंशन का उपयोग करना सुविधाजनक है।
import android.os.Trace
fun traceSection(name: String, block: () -> Unit) {
Trace.beginSection(name)
try {
block()
} finally {
Trace.endSection()
}
}
// कोड में उपयोग
traceSection("load_screen_data") {
fetchData()
updateUI()
}
Systrace रिपोर्ट एक स्व-निहित HTML फ़ाइल है जिसे Chrome, Edge या Firefox में खोला जा सकता है। इसमें एक इंटरैक्टिव टाइमलाइन, एक प्रक्रिया चयन पैनल, अलर्ट संदेशों की एक सूची और प्रमुख मेट्रिक्स (फ्रेम दर, CPU उपयोग, Binder लेनदेन) शामिल हैं। रिपोर्ट संरचना को समझना प्रभावी प्रोफाइलिंग के लिए एक महत्वपूर्ण कौशल है।
टाइमलाइन समय को बाएं से दाएं प्रदर्शित करती है। प्रत्येक प्रक्रिया और थ्रेड एक अलग लेन है। W/S कुंजियाँ ज़ूम इन/आउट करती हैं, A/D समय के माध्यम से चलती हैं। किसी अनुभाग को बड़ा करने के लिए माउस से एक क्षेत्र चुनें। VSync रेखाएं फ्रेम सीमाएं दिखाती हैं (60 FPS पर हर 16.6 ms)। यदि दो VSync रेखाओं के बीच पूर्ण रेंडरिंग चक्र फिट नहीं होता है — फ्रेम ड्रॉप हो जाता है। SurfaceFlinger लेन पर ध्यान दें: यदि यह लंबे समय तक व्यस्त है (नारंगी ब्लॉक), तो लेयर कंपोज़िशन समग्र रेंडरिंग को धीमा कर रही है।
रिपोर्ट के बाईं ओर अलर्ट पैनल में स्वचालित रूप से पाई गई समस्याएं होती हैं। प्रत्येक अलर्ट क्लिक करने योग्य है — क्लिक करने पर टाइमलाइन समस्या वाले क्षण पर चली जाती है। सबसे सामान्य अलर्ट: “Long Sync” (लंबी थ्रेड सिंक्रोनाइज़ेशन), “Scheduling Delay” (शेड्यूलर देरी), “Buffer Overrun” (SurfaceFlinger बफर ओवरफ्लो)। यदि कोई अलर्ट Scheduling Delay के लिए ~100 ms का मान दिखाता है, तो यह सीधे इंगित करता है कि UI थ्रेड बैकग्राउंड लोड के कारण CPU की प्रतीक्षा कर रहा था — भारी गणनाओं को वर्कर थ्रेड में ले जाना चाहिए।
ड्रॉप किए गए फ्रेम का विश्लेषण करने के लिए, SurfaceFlinger और app.gfx लेन सक्षम करें। प्रत्येक फ्रेम एक आयत के रूप में प्रदर्शित होता है: हरा (≤16 ms), पीला (16–32 ms), लाल (>32 ms)। यदि आप ऐप लेन पर लाल आयत देखते हैं, तो उस पर क्लिक करें — Systrace दिखाएगा कि किस विशिष्ट विधि (या सिस्टम कॉल) ने सीमा पार की। Google (Android Performance Patterns, 2023) के अनुसार, 70% jank समस्याएं धीमी onBindViewHolder या बार-बार GC के कारण होती हैं।
Perfetto Systrace का उत्तराधिकारी है, जिसे Google ने Android 9 (Pie) में एक प्रयोगात्मक उपकरण के रूप में पेश किया और Android 12 से शुरू करके प्राथमिक समाधान बन गया। Perfetto एक आधुनिक प्रोटोबफ डेटा प्रारूप का उपयोग करता है, लंबे सत्रों का समर्थन करता है (सेकंड के बजाय घंटे), और ट्रेस देखने के लिए वेब UI है। आइए दो प्रणालियों के बीच मुख्य अंतरों की जांच करें।
| मानदंड | Systrace | Perfetto |
|---|---|---|
| प्रारूप | HTML रिपोर्ट (trace.html) | प्रोटोबफ (.trace / .perfetto-trace) |
| अवधि | 60 सेकंड तक | घंटे, गीगाबाइट डेटा |
| इंटरफ़ेस | अंतर्निहित HTML | वेब UI (ui.perfetto.dev) |
| श्रेणियां | निश्चित (ftrace + atrace) | विस्तार योग्य (ट्रेस के लिए SQL क्वेरी) |
| गतिशीलता | केवल Android | Android, Linux, Chrome, Windows |
Perfetto में संक्रमण के बावजूद, Systrace कौशल प्रासंगिक बने हुए हैं: Android 11 और उससे नीचे चलने वाले उपकरणों पर, इसका डिफ़ॉल्ट रूप से उपयोग किया जाता है, और Perfetto Systrace श्रेणियों के साथ पिछड़ी संगतता बनाए रखता है। Android Studio CPU Profiler में, नए उपकरणों के लिए Perfetto और पुराने के लिए Systrace का उपयोग किया जाता है — उपयोगकर्ता के लिए पारदर्शी। CI/CD के लिए, Perfetto अनुशंसित है क्योंकि इसके प्रारूप को Python और SQL के माध्यम से स्वचालित रूप से संसाधित किया जा सकता है।
व्यावहारिक रूप से Systrace में महारत हासिल करने के लिए, आइए दो परिदृश्यों पर विचार करें: स्क्रॉलिंग के दौरान ड्रॉप किए गए फ्रेम का कारण ढूंढना और बार-बार GC का निदान करना जो UI थ्रेड को ब्लॉक करता है।
Systrace को gfx श्रेणी के साथ 10 सेकंड के लिए चलाएं, ऐप में सूची स्क्रॉल करें। रिपोर्ट में, लाल फ्रेम वाले अनुभाग खोजें। समस्या वाले फ्रेम पर क्लिक करें और ऐप लेन देखें — यदि 16 ms से अधिक चौड़ा “inflateLayout” या “onBindViewHolder” ब्लॉक है, तो समस्या लेआउट इन्फ्लेशन या डेटा बाइंडिंग में है। समाधान: लेआउट को ऑप्टिमाइज़ करें (गहरे ViewGroup को कम करें, ViewStub), इमेज लोडिंग को onAttachedToWindow के साथ Glide में स्थानांतरित करें।
freq और sched श्रेणियों के साथ Systrace आपको यह देखने की अनुमति देता है कि GC चक्र कितनी बार UI थ्रेड को प्रीएम्प्ट करते हैं। टाइमलाइन पर एप्लिकेशन लेन खोजें — यदि आप “Concurrent GC” नामक 20–50 ms तक चलने वाले आवधिक ब्लॉक देखते हैं, तो कचरा संग्रहकर्ता बहुत बार चल रहा है। विस्तृत विश्लेषण के लिए “dalvik” श्रेणी जोड़ें। समाधान: Bitmap को ByteBuffer में बदलें, बार-बार आवंटन के लिए ऑब्जेक्ट पूल (ObjectPool) का उपयोग करें, ART तर्कों के माध्यम से हीप विखंडन कम करें।
# UI + GC विश्लेषण के लिए श्रेणियों के साथ रन
$ python systrace.py \
--time=15 \
-o gc_analysis.html \
gfx sched dalvik freq
# पुनरुत्पादक परीक्षण के लिए 30 सेकंड की अवधि के साथ कैप्चर
$ python systrace.py \
--time=30 \
--app=com.example.app \
-o app_trace.html
अक्सर पूछे जाने वाले प्रश्न
हां, Systrace चलाने के लिए रूट एक्सेस की आवश्यकता नहीं है। यह उपकरण atrace का उपयोग करता है, जो USB डिबगिंग सक्षम किसी भी डिवाइस पर उपलब्ध है। कुछ श्रेणियां (power, freq) को सिस्टम हस्ताक्षर की आवश्यकता हो सकती है, लेकिन मुख्य श्रेणियां (gfx, sched, input) सभी डिवाइसों पर काम करती हैं।
60 सेकंड की सीमा ftrace रिंग बफर क्षमता से संबंधित है — लंबी रिकॉर्डिंग के दौरान, बफर ओवरराइट हो जाता है। Perfetto इस सीमा को हटा देता है: आप घंटों रिकॉर्ड कर सकते हैं और USB स्थानांतरण या डिस्क पर स्ट्रीमिंग के माध्यम से कई गीगाबाइट तक के ट्रेस प्राप्त कर सकते हैं।
संभावित कारण: ऐप डिबगेबल मोड में नहीं है, मेनिफेस्ट में android:debuggable=“true” फ़्लैग सेट नहीं है, या रिलीज़ बिल्ड का उपयोग किया जा रहा है। यह भी जांचें कि श्रेणियों में --app=com.example.app निर्दिष्ट किया गया है — अन्यथा Systrace केवल सिस्टम प्रक्रियाओं को कैप्चर करता है।
C++ के लिए, libcutils लाइब्रेरी से ATRACE_BEGIN और ATRACE_END का उपयोग करें। हेडर फ़ाइल शामिल करें और वांछित अनुभाग को लपेटें। टैग आपकी प्रक्रिया लेन पर Systrace में दिखाई देगा, जो विशेष रूप से गेम इंजन (Unity, Unreal) के विश्लेषण के लिए उपयोगी है।
Android 12 और उससे ऊपर पर, Perfetto का उपयोग करें। ADB के माध्यम से डिवाइस पर perfetto एजेंट स्थापित करें, JSON प्रारूप में रिकॉर्डिंग शुरू करें। त्वरित देखने के लिए, Perfetto वेब UI (ui.perfetto.dev) का उपयोग करें, और CI के लिए — Python में TraceProcessor के साथ कमांड-लाइन निर्यात करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें