Systrace — چیست، ابزار ردیابی سیستم اندروید

نویسنده: IT Sectr منتشر شده: 2026-03-31 زمان مطالعه: 9 دقیقه

Systrace ابزاری برای ردیابی سیستمی اندروید است که داده‌هایی درباره عملکرد هسته لینوکس، پردازنده، شتاب‌دهنده گرافیکی و تمام فرآیندهای سیستم در یک بازه زمانی کوتاه جمع‌آوری می‌کند. برخلاف Traceview که روی متدهای داخل برنامه تمرکز دارد، Systrace تصویر سیستمی را نشان می‌دهد: بار هر هسته CPU، کار SurfaceFlinger، فراخوانی‌های Binder و چرخه‌های GC. به گفته Google، 2024، این ابزار برای تشخیص فریم‌های از دست رفته، جمع‌آوری زباله مکرر و ناهنجاری‌های رشته UI ضروری است.

نکات کلیدی

  • Systrace — ابزار ردیابی سیستمی سطح پایین اندروید که از طریق atrace/ftrace کار می‌کند
  • ردیابی‌ها شامل داده‌های CPU، GPU، رشته‌ها، SurfaceFlinger و Binder در بازه تا ۶۰ ثانیه هستند
  • تحلیل امکان مشاهده علت دقیق فریم‌های از دست رفته و قفل‌شدگی رشته UI را فراهم می‌کند
  • ادغام با Android Studio و خط فرمان برای ضبط انعطاف‌پذیر و خودکارسازی
  • Perfetto — جانشین Systrace در اندروید ۱۲+ که از فرمت پروتوبافر استفاده می‌کند

Systrace چیست

Systrace ابزاری خط فرمان از Android SDK است که داده‌ها را از چندین منبع ردیابی هسته (ftrace) و فضای کاربر (atrace) ضبط کرده و در یک گزارش HTML واحد ترکیب می‌کند. این ابزار در اندروید ۴.۱ (Jelly Bean) به عنوان جایگزینی برای ابزار قدیمی traceview برای پروفایل‌گیری سیستمی ظاهر شد و مدت طولانی به عنوان ابزار استاندارد تشخیص عملکرد در پلتفرم اندروید باقی ماند.

معماری Systrace

Systrace بر ftrace تکیه دارد — مکانیزم ردیابی هسته لینوکس که از اندروید ۴.۱ در دسترس است. هنگام اجرا، Systrace دسته‌بندی‌های مشخصی از ردیابی‌ها را فعال می‌کند: sched (زمان‌بند وظایف)، freq (فرکانس CPU)، idle (حالت‌های بیکاری)، workq (صف‌های کاری)، binder، gfx و غیره. داده‌ها در بافر حلقوی هسته جمع‌آوری می‌شوند و پس از توقف dumping در یک فایل trace.html ترکیب می‌شوند که در هر مرورگری باز می‌شود.

Systrace در زمینه Android Studio

از Android Studio 3.1، Systrace در CPU Profiler تعبیه شده است. در حالت “Trace System Calls” پروفایلر Systrace را روی دستگاه متصل اجرا می‌کند و نتایج را مستقیماً در پنجره Android Studio نمایش می‌دهد. این کار نیاز به کار با خط فرمان را برای موارد پایه برطرف می‌کند، در عین حال عملکرد کامل — همه دسته‌بندی‌های ردیابی، فیلتر کردن و timeline تعاملی — را حفظ می‌کند. عملکرد دستگاه در طول ردیابی به میزان کمی کاهش می‌یابد، زیرا ftrace برای سربار حداقلی طراحی شده است.

Systrace چگونه کار می‌کند

Systrace از دو مکانیزم جمع‌آوری داده استفاده می‌کند: ftrace در سطح هسته برای رویدادهای سیستمی و atrace در فضای کاربر برای برچسب‌های مخصوص اندروید. ftrace جابه‌جایی‌های زمینه (sched_switch)، تغییرات فرکانس CPU (cpu_frequency)، وقفه‌ها (irq_handler_entry) و رویدادهای دیگر را ثبت می‌کند. atrace برچسب‌هایی از فریمورک اندروید اضافه می‌کند — شروع و پایان رندر فریم، فراخوانی‌های SurfaceFlinger و تراکنش‌های Binder.

زنجیره رندر فریم در Systrace

قابلیت کلیدی Systrace — تجسم زنجیره رندر هر فریم: برنامه → BufferQueue → SurfaceFlinger → HWC (composer) → Display. اگر در هر مرحله تأخیری رخ دهد، Systrace علت دقیق را نشان می‌دهد: برنامه نتوانست بافر را آماده کند، SurfaceFlinger منتظر VSync ماند یا HWC نتوانست لایه‌ها را ترکیب کند. چرخه عمر فریم در timeline بر اساس وضعیت‌ها رنگ‌بندی می‌شود: سبز (به موقع)، زرد (تأخیر)، قرمز (افتادن). این تجسم ابزار اصلی برای بهینه‌سازی عملکرد UI است.

دسته‌بندی‌های ردیابی

Systrace بیش از ۲۰ دسته‌بندی ردیابی را پشتیبانی می‌کند که هر کدام شامل مجموعه‌ای از رویدادهای مرتبط هستند. دسته‌بندی‌های مهم: gfx (رندر گرافیک)، input (پردازش ورودی)، view (سیستم View)، webview (WebView)، power (مصرف انرژی)، hal (انتزاع سخت‌افزار). برای پروفایل‌گیری بازی‌ها، دسته‌بندی gfx با جزئیات تا دستورات GPU از طریق AGI (Android GPU Inspector) مفید است.

قابلیت‌های کلیدی Systrace

Systrace مجموعه‌ای منحصر‌به‌فرد از قابلیت‌ها را برای اندروید فراهم می‌کند که در سایر پروفایلرها در دسترس نیست: timeline سیستمی، معیارهای سطح هسته و تشخیص خودکار مشکلات.

Timeline تعاملی

گزارش HTML Systrace شامل یک timeline چندسطحی است که هر مسیر مربوط به یک فرآیند یا رشته است. می‌توان مقیاس زمانی را بزرگ و کوچک کرد، روی رویدادها کلیک کرد تا جزئیات را مشاهده کرد (مدت زمان، فرآیند آغازگر، آرگومان‌های اضافی). کدگذاری رنگی به جهت‌یابی سریع کمک می‌کند: بلوک‌های سبز — کار فرآیند، آبی — انتظار، نارنجی — وقفه، سفید — بیکاری.

پیام‌های Alert

Systrace به طور خودکار ردیابی را تحلیل کرده و پیام‌های Alert را با نشان دادن مکان‌های مشکل‌دار نمایش می‌دهد. به عنوان مثال: “Buffer underrun — SurfaceFlinger نتوانست بافر را قبل از VSync دریافت کند” یا “Long Binder transaction — 42 ms در رشته Binder_1”. هر alert حاوی پیوندی به بخش مربوطه از timeline و توصیه‌ای برای رفع مشکل است. این کار ساعت‌ها تحلیل دستی را صرفه‌جویی کرده و یکی از دلایل اصلی استفاده از Systrace به جای لاگ‌گیری دستی است.

متد Trace.beginSection

توسعه‌دهنده می‌تواند برچسب‌های سفارشی خود را از طریق API Trace.beginSection و Trace.endSection به ردیابی Systrace اضافه کند. این امکان ردیابی اجرای بخش‌های بحرانی کد را مستقیماً روی timeline سیستمی فراهم می‌کند — مثلاً علامت‌گذاری شروع و پایان بارگذاری داده یا محاسبه طرح. برچسب‌ها به عنوان بلوک‌های جداگانه روی مسیر برنامه نمایش داده می‌شوند و در کنار رویدادهای سیستمی قابل مشاهده هستند.

دسته‌بندیداده‌هاکاربرد معمول
schedجابه‌جایی‌های زمینه، حالت‌های بیکاریقفل‌شدگی رشته‌ها، contention
gfxVSync، آماده‌سازی بافر، HWCافت فریم، jank
binderتراکنش‌های Binder، تأخیرتأخیر IPC، فراخوانی‌های از راه دور
freqفرکانس CPU، scaling governorThrottling، مصرف انرژی
gfx + AGIدستورات GPU، شیدرهاعملکرد بازی

چگونه Systrace را اجرا کنیم

اجرای Systrace به دو روش امکان‌پذیر است: از طریق Android Studio CPU Profiler (حالت “Trace System Calls”) یا از طریق خط فرمان با استفاده از اسکریپت python systrace.py از پوشه platform-tools. هر روش سناریوهای کاربری خاص خود را دارد.

اجرا از طریق Android Studio

دستگاه را متصل کنید، Profiler را باز کنید (View → Tool Windows → Profiler)، فرآیند خود را انتخاب کنید، به برگه CPU بروید، حالت “Trace System Calls” را انتخاب کرده و Record را بزنید. پس از ۵–۳۰ ثانیه Stop را بزنید — Android Studio Systrace را روی دستگاه اجرا می‌کند، منتظر اتمام می‌ماند و نتیجه را بارگذاری می‌کند. محدودیت: ضبط تنها زمانی که Profiler باز است امکان‌پذیر است که برای سناریوهای طولانی یا خودکارسازی ناخوشایند است.

اجرا از خط فرمان

برای کنترل انعطاف‌پذیرتر از اسکریپت systrace.py استفاده کنید. دسته‌بندی‌های ردیابی، مدت زمان و نام فایل خروجی را مشخص کنید. مثال: ضبط داده‌های gfx، input و sched به مدت ۱۰ ثانیه. برای اجرا نیاز به Python 2.7+ و دستگاه متصل با USB debugging است. در اندروید ۱۲+ Systrace با Perfetto جایگزین شده است — دستور همان است، اما اسکریپت فراخوانی‌ها را به perfetto هدایت می‌کند.

bash
# اجرای پایه systrace به مدت ۱۰ ثانیه
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# فقط دسته‌بندی gfx برای تحلیل UI
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

تنظیم برچسب‌های سفارشی در کد

برای اینکه کد شما در timeline Systrace ظاهر شود، بخش بحرانی را در Trace.beginSection / Trace.endSection قرار دهید. مهم است که beginSection و endSection به طور دقیق جفت شوند — در غیر این صورت Systrace timeline نادرستی نشان می‌دهد. در Kotlin استفاده از inline-extension برای تضمین بسته شدن بخش حتی در صورت استثنا راحت است.

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()
}

خواندن گزارش HTML Systrace

گزارش Systrace یک فایل HTML مستقل است که می‌توان در Chrome، Edge یا Firefox باز کرد. این گزارش شامل timeline تعاملی، پنل انتخاب فرآیند، لیست پیام‌های alert و معیارهای کلیدی (نرخ فریم، مصرف CPU، تراکنش‌های Binder) است. درک ساختار گزارش مهارت کلیدی برای پروفایل‌گیری مؤثر است.

Timeline و ناوبری

Timeline زمان را از چپ به راست نمایش می‌دهد. هر فرآیند و رشته — یک مسیر جداگانه. کلیدهای W/S بزرگ/کوچک می‌کنند، A/D در زمان حرکت می‌کنند. برای بزرگنمایی یک بخش، ناحیه را با ماوس انتخاب کنید. خطوط VSync مرزهای فریم را نشان می‌دهند (هر ۱۶.۶ ms در ۶۰ FPS). اگر بین دو خط VSync یک چرخه کامل رندر جا نشود — فریم افتاده است. به مسیر SurfaceFlinger توجه کنید: اگر طولانی مشغول باشد (بلوک نارنجی)، به این معنی است که ترکیب لایه‌ها رندر کلی را کند می‌کند.

تحلیل پیام‌های alert

پنل Alerts در سمت چپ گزارش شامل مشکلات کشف شده به طور خودکار است. هر alert قابل کلیک است — با کلیک، timeline به لحظه مشکل‌دار می‌رود. رایج‌ترین alertها: “Long Sync” (همگام‌سازی طولانی رشته)، “Scheduling Delay” (تأخیر زمان‌بند)، “Buffer Overrun” (سرریز بافر SurfaceFlinger). اگر alert مقدار حدود ۱۰۰ ms را برای Scheduling Delay نشان دهد، این مستقیماً به این معنی است که رشته UI به دلیل بار پس‌زمینه منتظر CPU مانده است — باید محاسبات سنگین را به Worker Thread منتقل کرد.

چرخه عمر فریم و jank

برای تحلیل فریم‌های افتاده، مسیرهای SurfaceFlinger و app.gfx را فعال کنید. هر فریم به صورت یک مستطیل نمایش داده می‌شود: سبز (≤۱۶ ms)، زرد (۱۶–۳۲ ms)، قرمز (>۳۲ ms). اگر یک مستطیل قرمز در مسیر برنامه می‌بینید، روی آن کلیک کنید — Systrace نشان می‌دهد کدام متد (یا فراخوانی سیستمی) از حد مجاز فراتر رفته است. به گفته Google (Android Performance Patterns، ۲۰۲۳)، ۷۰٪ مشکلات jank ناشی از onBindViewHolder طولانی یا GC مکرر است.

Systrace در مقابل Perfetto: انتقال به فرمت جدید

Perfetto جانشین Systrace است که توسط Google در اندروید ۹ (Pie) به عنوان یک ابزار آزمایشی معرفی شد و از اندروید ۱۲ به ابزار اصلی تبدیل شد. Perfetto از فرمت مدرن پروتوبافر استفاده می‌کند، از جلسات طولانی (ساعت‌ها به جای ثانیه‌ها) پشتیبانی کرده و دارای Web UI برای مشاهده ردیابی‌ها است. تفاوت‌های کلیدی دو سیستم را بررسی می‌کنیم.

معیارSystracePerfetto
فرمتگزارش HTML (trace.html)پروتوبافر (.trace / .perfetto-trace)
مدت زمانتا ۶۰ ثانیهساعت‌ها، گیگابایت داده
رابط کاربریHTML داخلیWeb UI (ui.perfetto.dev)
دسته‌بندی‌هاثابت (ftrace + atrace)قابل توسعه (پرسش‌های SQL روی ردیابی)
قابلیت حملفقط اندرویداندروید، لینوکس، Chrome، ویندوز

با وجود انتقال به Perfetto، مهارت کار با Systrace همچنان مرتبط است: در دستگاه‌های تا اندروید ۱۱ به طور پیش‌فرض استفاده می‌شود و Perfetto سازگاری معکوس با دسته‌بندی‌های Systrace را حفظ می‌کند. Android Studio CPU Profiler از Perfetto برای دستگاه‌های جدید و Systrace برای دستگاه‌های قدیمی استفاده می‌کند — به صورت شفاف برای کاربر. برای CI/CD توصیه می‌شود از Perfetto استفاده شود زیرا فرمت آن برای پردازش خودکار از طریق Python و SQL مناسب است.

نمونه‌های استفاده از Systrace

برای تسلط عملی بر Systrace، دو سناریو را بررسی می‌کنیم: یافتن علت فریم‌های افتاده هنگام اسکرول و تشخیص GC مکرر که رشته UI را مسدود می‌کند.

جستجوی jank هنگام پیمایش RecyclerView

Systrace را با دسته‌بندی gfx به مدت ۱۰ ثانیه اجرا کنید، لیست را در برنامه اسکرول کنید. در گزارش بخش‌های دارای فریم‌های قرمز را پیدا کنید. روی فریم مشکل‌دار کلیک کنید و به مسیر app نگاه کنید — اگر بلوک “inflateLayout” یا “onBindViewHolder” با عرض >۱۶ ms وجود دارد، مشکل در باد کردن طرح یا اتصال داده است. راه‌حل: طرح را بهینه‌سازی کنید (کاهش عمق ViewGroup، ViewStub)، بارگذاری تصاویر را با Glide در onAttachedToWindow انجام دهید.

تشخیص توان GC

Systrace با دسته‌بندی freq و sched امکان مشاهده تعداد دفعاتی که چرخه‌های GC رشته UI را کنار می‌زنند فراهم می‌کند. مسیر برنامه را در timeline پیدا کنید — اگر بلوک‌های دوره‌ای با مدت ۲۰–۵۰ ms با نام “Concurrent GC” می‌بینید، به این معنی است که جمع‌آوری‌کننده زباله بیش از حد کار می‌کند. دسته‌بندی “dalvik” را برای تحلیل دقیق اضافه کنید. راه‌حل: Bitmap را به ByteBuffer تبدیل کنید، از ObjectPool برای تخصیص‌های مکرر استفاده کنید، fragmentation heap را با آرگومان ART کاهش دهید.

bash
# اجرا با دسته‌بندی‌ها برای تحلیل UI + GC
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# ضبط با مدت ۳۰ ثانیه برای تست قابل تکرار
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

سوالات متداول

آیا می‌توان Systrace را بدون دسترسی root اجرا کرد؟

بله، برای اجرای Systrace دسترسی root لازم نیست. این ابزار از atrace استفاده می‌کند که در هر دستگاهی با USB debugging فعال در دسترس است. برخی دسته‌بندی‌ها (power, freq) ممکن است نیاز به امضای سیستم داشته باشند، اما دسته‌بندی‌های اصلی (gfx, sched, input) روی همه دستگاه‌ها کار می‌کنند.

حداکثر اندازه فایل ردیابی چقدر است؟

محدودیت ۶۰ ثانیه به حجم بافر حلقوی ftrace مربوط است — در ضبط طولانی، بافر بازنویسی می‌شود. Perfetto این محدودیت را برطرف می‌کند: می‌توان ساعت‌ها ضبط کرد و ردیابی‌هایی با اندازه چند گیگابایت با انتقال از طریق USB یا ضبط جریانی روی دیسک دریافت کرد.

چرا در گزارش HTML داده‌های برنامه من وجود ندارد؟

دلایل احتمالی: برنامه به حالت debuggable منتقل نشده است، پرچم android:debuggable=”true” در مانیفست اضافه نشده است، یا از بیلد release استفاده می‌شود. همچنین بررسی کنید که در دسته‌بندی‌ها --app=com.example.app مشخص شده است — در غیر این صورت Systrace فقط فرآیندهای سیستمی را ضبط می‌کند.

چگونه از کد native برچسب خود را به Systrace اضافه کنم؟

برای C++ از ATRACE_BEGIN و ATRACE_END از کتابخانه libcutils استفاده کنید. فایل هدر را include کرده و بخش مورد نظر را محصور کنید. برچسب در Systrace روی مسیر فرآیند شما ظاهر می‌شود که به ویژه برای تحلیل موتورهای بازی (Unity, Unreal) مفید است.

در اندروید ۱۲+ Systrace را با چه چیزی جایگزین کنیم؟

در اندروید ۱۲ و بالاتر از Perfetto استفاده کنید. عامل perfetto را روی دستگاه از طریق ADB نصب کنید، ضبط را در فرمت JSON شروع کنید. برای مشاهده سریع از Perfetto Web UI (ui.perfetto.dev) و برای CI از خروجی دستوری با TraceProcessor در پایتون استفاده کنید.

خلاصه

  • Systrace — ردیاب سیستمی اندروید که در سطح هسته از طریق ftrace و atrace کار می‌کند
  • بار CPU، GPU، SurfaceFlinger و تراکنش‌های Binder را در یک timeline واحد نشان می‌دهد
  • گزارش HTML شامل پیام‌های Alert خودکار با نشان دادن مشکلات و توصیه‌ها است
  • اجرا از طریق Android Studio Profiler یا خط فرمان با systrace.py
  • رشته UI بحرانی است: هر فریم باید در ۱۶.۶ ms برای ۶۰ FPS جا شود
  • در اندروید ۱۲+ Systrace با Perfetto با پشتیبانی از جلسات طولانی و پرسش‌های SQL جایگزین شده است
  • توصیه می‌شود Systrace و Traceview را برای پروفایل‌گیری سیستمی و کاربردی ترکیب کنید

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید