Systrace — यह क्या है, Android सिस्टम ट्रेसिंग टूल

लेखक: IT Sectr प्रकाशित: 2026-03-31 पढ़ने का समय: 9 मिनट

Systrace एक Android सिस्टम ट्रेसिंग टूल है जो लिनक्स कर्नेल, CPU, GPU और सभी सिस्टम प्रक्रियाओं के बारे में थोड़े समय में डेटा एकत्र करता है। Traceview के विपरीत, जो एप्लिकेशन के अंदर विधियों पर ध्यान केंद्रित करता है, Systrace सिस्टम चित्र दिखाता है: प्रत्येक CPU कोर का लोड, SurfaceFlinger संचालन, Binder कॉल और GC चक्र। Google, 2024 के अनुसार, यह टूल ड्रॉप किए गए फ्रेम, बार-बार कचरा संग्रहण और UI थ्रेड में विसंगतियों के निदान के लिए अपरिहार्य है।

मुख्य बातें

  • Systrace — Android के लिए एक निम्न-स्तरीय सिस्टम ट्रेसिंग टूल, जो atrace/ftrace के माध्यम से काम करता है
  • ट्रेस में 60 सेकंड तक की अवधि के लिए CPU, GPU, थ्रेड, SurfaceFlinger और Binder डेटा होता है
  • विश्लेषण ड्रॉप किए गए फ्रेम और UI थ्रेड अवरोधन का सटीक कारण देखने की अनुमति देता है
  • एकीकरण लचीली कैप्चर और ऑटोमेशन के लिए Android Studio और कमांड लाइन के साथ
  • Perfetto — Android 12+ पर Systrace का उत्तराधिकारी, सामान्य प्रोटोबफ प्रारूप का उपयोग करता है

Systrace क्या है

Systrace Android SDK से एक कमांड-लाइन उपयोगिता है जो एकल HTML रिपोर्ट में कर्नेल ट्रेसिंग (ftrace) और उपयोगकर्ता स्थान (atrace) के कई स्रोतों से डेटा कैप्चर और मर्ज करती है। यह उपकरण Android 4.1 (Jelly Bean) में सिस्टम प्रोफाइलिंग के लिए पुरानी traceview उपयोगिता के प्रतिस्थापन के रूप में दिखाई दिया और लंबे समय तक Android प्लेटफॉर्म पर मानक प्रदर्शन निदान उपकरण बना रहा।

Systrace आर्किटेक्चर

Systrace ftrace पर निर्भर करता है — एक लिनक्स कर्नेल ट्रेसिंग तंत्र जो Android संस्करण 4.1 से उपलब्ध है। जब Systrace शुरू होता है, यह निर्दिष्ट ट्रेस श्रेणियों को सक्रिय करता है: sched (कार्य अनुसूचक), freq (CPU आवृत्ति), idle (निष्क्रिय अवस्थाएं), workq (कार्य कतारें), binder, gfx और अन्य। डेटा कर्नेल के रिंग बफर में एकत्र किया जाता है और रुकने के बाद एक एकल trace.html फ़ाइल में मर्ज किया जाता है जिसे किसी भी ब्राउज़र में खोला जा सकता है।

Android Studio के संदर्भ में Systrace

Android Studio 3.1 से शुरू करके, Systrace CPU Profiler में बनाया गया है। “Trace System Calls” मोड में, प्रोफाइलर कनेक्टेड डिवाइस पर Systrace चलाता है और परिणाम सीधे Android Studio विंडो में प्रदर्शित करता है। यह बुनियादी मामलों के लिए कमांड लाइन के साथ काम करने की आवश्यकता को समाप्त करता है जबकि पूर्ण कार्यक्षमता — सभी ट्रेस श्रेणियां, फ़िल्टरिंग और इंटरैक्टिव टाइमलाइन — बनाए रखता है। ट्रेसिंग के दौरान डिवाइस प्रदर्शन नगण्य रूप से कम हो जाता है क्योंकि ftrace न्यूनतम ओवरहेड के लिए डिज़ाइन किया गया है।

Systrace कैसे काम करता है

Systrace डेटा संग्रह के दो तंत्रों का उपयोग करता है: सिस्टम ईवेंट के लिए कर्नेल स्तर पर ftrace और Android-विशिष्ट टैग के लिए उपयोगकर्ता स्थान में atrace। ftrace संदर्भ स्विच (sched_switch), CPU आवृत्ति परिवर्तन (cpu_frequency), इंटरप्ट (irq_handler_entry) और अन्य ईवेंट रिकॉर्ड करता है। atrace Android फ्रेमवर्क से टैग जोड़ता है — फ्रेम रेंडरिंग की शुरुआत और अंत, SurfaceFlinger कॉल और Binder लेनदेन।

Systrace में फ्रेम रेंडरिंग पाइपलाइन

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 की मुख्य विशेषताएं

Systrace Android के लिए क्षमताओं का एक अद्वितीय सेट प्रदान करता है जो अन्य प्रोफाइलर में उपलब्ध नहीं हैं: सिस्टम टाइमलाइन, कर्नेल-स्तरीय मेट्रिक्स और स्वचालित समस्या का पता लगाना।

इंटरैक्टिव टाइमलाइन

Systrace HTML रिपोर्ट में एक बहु-स्तरीय टाइमलाइन होती है जहां प्रत्येक लेन एक प्रक्रिया या थ्रेड से मेल खाती है। आप समय पैमाने पर ज़ूम इन और आउट कर सकते हैं, विवरण देखने के लिए ईवेंट पर क्लिक कर सकते हैं (अवधि, आरंभक प्रक्रिया, अतिरिक्त तर्क)। रंग कोडिंग तेज़ी से नेविगेट करने में मदद करती है: हरे ब्लॉक — प्रक्रिया चल रही है, नीले — प्रतीक्षा कर रही है, नारंगी — इंटरप्ट, सफेद — निष्क्रिय।

अलर्ट संदेश

Systrace स्वचालित रूप से ट्रेस का विश्लेषण करता है और समस्या क्षेत्रों को इंगित करने वाले अलर्ट संदेश प्रदर्शित करता है। उदाहरण के लिए: “Buffer underrun — SurfaceFlinger को VSync से पहले बफर नहीं मिला” या “Long Binder transaction — थ्रेड Binder_1 में 42 ms”। प्रत्येक अलर्ट में टाइमलाइन के संबंधित अनुभाग का लिंक और समस्या को ठीक करने की सिफारिश होती है। यह मैन्युअल विश्लेषण के घंटे बचाता है और मैन्युअल लॉगिंग के बजाय Systrace का उपयोग करने का एक मुख्य कारण है।

Trace.beginSection विधि

डेवलपर Trace.beginSection और Trace.endSection API के माध्यम से Systrace ट्रेस में कस्टम टैग जोड़ सकते हैं। यह सीधे सिस्टम टाइमलाइन पर महत्वपूर्ण कोड अनुभागों के निष्पादन को ट्रेस करने की अनुमति देता है — उदाहरण के लिए, डेटा लोडिंग या लेआउट गणना की शुरुआत और अंत को चिह्नित करना। टैग एप्लिकेशन लेन पर अलग ब्लॉक के रूप में दिखाई देते हैं और सिस्टम ईवेंट के साथ दिखाई देते हैं।

श्रेणीडेटासामान्य उपयोग
schedसंदर्भ स्विच, निष्क्रिय अवस्थाएंथ्रेड अवरोधन, प्रतिस्पर्धा
gfxVSync, बफर तैयारी, HWCफ्रेम ड्रॉप, jank
binderBinder लेनदेन, विलंबताIPC देरी, दूरस्थ कॉल
freqCPU आवृत्ति, स्केलिंग गवर्नरथ्रॉटलिंग, बिजली खपत
gfx + AGIGPU कमांड, शेडरगेम प्रदर्शन

Systrace कैसे चलाएं

Systrace चलाना दो तरीकों से संभव है: Android Studio CPU Profiler (“Trace System Calls” मोड) के माध्यम से या platform-tools फ़ोल्डर से systrace.py Python स्क्रिप्ट का उपयोग करके कमांड लाइन के माध्यम से। प्रत्येक विधि के अपने उपयोग के मामले हैं।

Android Studio के माध्यम से चलाना

डिवाइस कनेक्ट करें, 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 पर रीडायरेक्ट करती है।

bash
# 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 में, अपवाद की स्थिति में भी सेक्शन क्लोजर की गारंटी के लिए इनलाइन एक्सटेंशन का उपयोग करना सुविधाजनक है।

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 रिपोर्ट पढ़ना

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 की प्रतीक्षा कर रहा था — भारी गणनाओं को वर्कर थ्रेड में ले जाना चाहिए।

फ्रेम जीवनचक्र और Jank

ड्रॉप किए गए फ्रेम का विश्लेषण करने के लिए, SurfaceFlinger और app.gfx लेन सक्षम करें। प्रत्येक फ्रेम एक आयत के रूप में प्रदर्शित होता है: हरा (≤16 ms), पीला (16–32 ms), लाल (>32 ms)। यदि आप ऐप लेन पर लाल आयत देखते हैं, तो उस पर क्लिक करें — Systrace दिखाएगा कि किस विशिष्ट विधि (या सिस्टम कॉल) ने सीमा पार की। Google (Android Performance Patterns, 2023) के अनुसार, 70% jank समस्याएं धीमी onBindViewHolder या बार-बार GC के कारण होती हैं।

Systrace बनाम Perfetto: नए प्रारूप में संक्रमण

Perfetto Systrace का उत्तराधिकारी है, जिसे Google ने Android 9 (Pie) में एक प्रयोगात्मक उपकरण के रूप में पेश किया और Android 12 से शुरू करके प्राथमिक समाधान बन गया। Perfetto एक आधुनिक प्रोटोबफ डेटा प्रारूप का उपयोग करता है, लंबे सत्रों का समर्थन करता है (सेकंड के बजाय घंटे), और ट्रेस देखने के लिए वेब UI है। आइए दो प्रणालियों के बीच मुख्य अंतरों की जांच करें।

मानदंडSystracePerfetto
प्रारूपHTML रिपोर्ट (trace.html)प्रोटोबफ (.trace / .perfetto-trace)
अवधि60 सेकंड तकघंटे, गीगाबाइट डेटा
इंटरफ़ेसअंतर्निहित HTMLवेब UI (ui.perfetto.dev)
श्रेणियांनिश्चित (ftrace + atrace)विस्तार योग्य (ट्रेस के लिए SQL क्वेरी)
गतिशीलताकेवल AndroidAndroid, Linux, Chrome, Windows

Perfetto में संक्रमण के बावजूद, Systrace कौशल प्रासंगिक बने हुए हैं: Android 11 और उससे नीचे चलने वाले उपकरणों पर, इसका डिफ़ॉल्ट रूप से उपयोग किया जाता है, और Perfetto Systrace श्रेणियों के साथ पिछड़ी संगतता बनाए रखता है। Android Studio CPU Profiler में, नए उपकरणों के लिए Perfetto और पुराने के लिए Systrace का उपयोग किया जाता है — उपयोगकर्ता के लिए पारदर्शी। CI/CD के लिए, Perfetto अनुशंसित है क्योंकि इसके प्रारूप को Python और SQL के माध्यम से स्वचालित रूप से संसाधित किया जा सकता है।

Systrace उपयोग उदाहरण

व्यावहारिक रूप से Systrace में महारत हासिल करने के लिए, आइए दो परिदृश्यों पर विचार करें: स्क्रॉलिंग के दौरान ड्रॉप किए गए फ्रेम का कारण ढूंढना और बार-बार GC का निदान करना जो UI थ्रेड को ब्लॉक करता है।

RecyclerView स्क्रॉल करते समय Jank ढूंढना

Systrace को gfx श्रेणी के साथ 10 सेकंड के लिए चलाएं, ऐप में सूची स्क्रॉल करें। रिपोर्ट में, लाल फ्रेम वाले अनुभाग खोजें। समस्या वाले फ्रेम पर क्लिक करें और ऐप लेन देखें — यदि 16 ms से अधिक चौड़ा “inflateLayout” या “onBindViewHolder” ब्लॉक है, तो समस्या लेआउट इन्फ्लेशन या डेटा बाइंडिंग में है। समाधान: लेआउट को ऑप्टिमाइज़ करें (गहरे ViewGroup को कम करें, ViewStub), इमेज लोडिंग को onAttachedToWindow के साथ Glide में स्थानांतरित करें।

GC थ्रूपुट का निदान

freq और sched श्रेणियों के साथ Systrace आपको यह देखने की अनुमति देता है कि GC चक्र कितनी बार UI थ्रेड को प्रीएम्प्ट करते हैं। टाइमलाइन पर एप्लिकेशन लेन खोजें — यदि आप “Concurrent GC” नामक 20–50 ms तक चलने वाले आवधिक ब्लॉक देखते हैं, तो कचरा संग्रहकर्ता बहुत बार चल रहा है। विस्तृत विश्लेषण के लिए “dalvik” श्रेणी जोड़ें। समाधान: Bitmap को ByteBuffer में बदलें, बार-बार आवंटन के लिए ऑब्जेक्ट पूल (ObjectPool) का उपयोग करें, ART तर्कों के माध्यम से हीप विखंडन कम करें।

bash
# 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 को रूट एक्सेस के बिना चलाया जा सकता है?

हां, Systrace चलाने के लिए रूट एक्सेस की आवश्यकता नहीं है। यह उपकरण atrace का उपयोग करता है, जो USB डिबगिंग सक्षम किसी भी डिवाइस पर उपलब्ध है। कुछ श्रेणियां (power, freq) को सिस्टम हस्ताक्षर की आवश्यकता हो सकती है, लेकिन मुख्य श्रेणियां (gfx, sched, input) सभी डिवाइसों पर काम करती हैं।

ट्रेस फ़ाइल का अधिकतम आकार क्या है?

60 सेकंड की सीमा ftrace रिंग बफर क्षमता से संबंधित है — लंबी रिकॉर्डिंग के दौरान, बफर ओवरराइट हो जाता है। Perfetto इस सीमा को हटा देता है: आप घंटों रिकॉर्ड कर सकते हैं और USB स्थानांतरण या डिस्क पर स्ट्रीमिंग के माध्यम से कई गीगाबाइट तक के ट्रेस प्राप्त कर सकते हैं।

मेरे ऐप का डेटा HTML रिपोर्ट में क्यों नहीं दिखता?

संभावित कारण: ऐप डिबगेबल मोड में नहीं है, मेनिफेस्ट में android:debuggable=“true” फ़्लैग सेट नहीं है, या रिलीज़ बिल्ड का उपयोग किया जा रहा है। यह भी जांचें कि श्रेणियों में --app=com.example.app निर्दिष्ट किया गया है — अन्यथा Systrace केवल सिस्टम प्रक्रियाओं को कैप्चर करता है।

मैं native कोड से Systrace में कस्टम टैग कैसे जोड़ूं?

C++ के लिए, libcutils लाइब्रेरी से ATRACE_BEGIN और ATRACE_END का उपयोग करें। हेडर फ़ाइल शामिल करें और वांछित अनुभाग को लपेटें। टैग आपकी प्रक्रिया लेन पर Systrace में दिखाई देगा, जो विशेष रूप से गेम इंजन (Unity, Unreal) के विश्लेषण के लिए उपयोगी है।

Android 12+ पर Systrace के बजाय क्या उपयोग करें?

Android 12 और उससे ऊपर पर, Perfetto का उपयोग करें। ADB के माध्यम से डिवाइस पर perfetto एजेंट स्थापित करें, JSON प्रारूप में रिकॉर्डिंग शुरू करें। त्वरित देखने के लिए, Perfetto वेब UI (ui.perfetto.dev) का उपयोग करें, और CI के लिए — Python में TraceProcessor के साथ कमांड-लाइन निर्यात करें।

सारांश

  • Systrace — एक Android सिस्टम ट्रेसर जो ftrace और atrace के माध्यम से कर्नेल स्तर पर संचालित होता है
  • एकीकृत टाइमलाइन पर CPU, GPU, SurfaceFlinger लोड और Binder लेनदेन दिखाता है
  • HTML रिपोर्ट में समस्या पहचान और सिफारिशों के साथ स्वचालित अलर्ट संदेश होते हैं
  • Android Studio Profiler या systrace.py के साथ कमांड लाइन के माध्यम से लॉन्च करें
  • UI थ्रेड महत्वपूर्ण है: 60 FPS के लिए प्रत्येक फ्रेम 16.6 ms में फिट होना चाहिए
  • Android 12+ पर, Systrace को लंबे सत्रों और SQL क्वेरी के समर्थन के साथ Perfetto से बदल दिया गया है
  • सिस्टम + एप्लिकेशन-स्तरीय प्रोफाइलिंग के लिए Systrace और Traceview को संयोजित करने की अनुशंसा की जाती है

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें