Systrace — τι είναι, εργαλείο ιχνηλάτησης συστήματος Android

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-03-31 Χρόνος ανάγνωσης: 9 λεπ

Systrace είναι ένα εργαλείο ιχνηλάτησης συστήματος Android που συλλέγει δεδομένα σχετικά με τη λειτουργία του πυρήνα Linux, του επεξεργαστή, της κάρτας γραφικών και όλων των διεργασιών συστήματος σε σύντομο χρονικό διάστημα. Σε αντίθεση με το Traceview, που εστιάζει σε μεθόδους εντός της εφαρμογής, το Systrace δείχνει την εικόνα συστήματος: φόρτο κάθε πυρήνα CPU, λειτουργία SurfaceFlinger, κλήσεις Binder και κύκλους GC. Σύμφωνα με την Google, 2024, το εργαλείο είναι απαραίτητο για τη διάγνωση χαμένων καρέ, συχνών συλλογών σκουπιδιών και ανωμαλιών στο νήμα UI.

Κύρια σημεία

  • Systrace — εργαλείο χαμηλού επιπέδου ιχνηλάτησης συστήματος Android, που λειτουργεί μέσω atrace/ftrace
  • Ίχνη περιέχουν δεδομένα CPU, GPU, νημάτων, SurfaceFlinger και Binder για περίοδο έως 60 δευτερόλεπτα
  • Ανάλυση επιτρέπει να δείτε την ακριβή αιτία χαμένων καρέ και μπλοκαρίσματος του νήματος UI
  • Ενσωμάτωση με το Android Studio και τη γραμμή εντολών για ευέλικτη καταγραφή και αυτοματοποίηση
  • Perfetto — ο διάδοχος του Systrace σε Android 12+, που χρησιμοποιεί κοινή μορφή protobuf

Τι είναι το Systrace

Systrace είναι ένα εργαλείο γραμμής εντολών από το Android SDK που καταγράφει και συνδυάζει δεδομένα από πολλαπλές πηγές ιχνηλάτησης πυρήνα (ftrace) και χώρου χρήστη (atrace) σε μία ενιαία αναφορά HTML. Το εργαλείο εμφανίστηκε στο Android 4.1 (Jelly Bean) ως αντικατάσταση του παλαιού εργαλείου traceview για προφίλ συστήματος και παρέμεινε για μεγάλο χρονικό διάστημα το τυπικό μέσο διάγνωσης απόδοσης στην πλατφόρμα Android.

Αρχιτεκτονική του Systrace

Systrace βασίζεται στο ftrace — τον μηχανισμό ιχνηλάτησης του πυρήνα Linux, διαθέσιμο στο Android από την έκδοση 4.1. Κατά την εκτέλεση, το Systrace ενεργοποιεί συγκεκριμένες κατηγορίες ιχνών: sched (χρονοπρογραμματιστής εργασιών), freq (συχνότητα CPU), idle (καταστάσεις αδράνειας), workq (ουρές εργασίας), binder, gfx και άλλες. Τα δεδομένα συλλέγονται σε κυκλικό buffer του πυρήνα και μετά τη διακοπή συνδυάζονται σε ένα ενιαίο αρχείο trace.html, το οποίο ανοίγει σε οποιοδήποτε πρόγραμμα περιήγησης.

Systrace στο πλαίσιο του Android Studio

Από το Android Studio 3.1, το Systrace είναι ενσωματωμένο στο CPU Profiler. Στη λειτουργία “Trace System Calls”, ο profiler εκτελεί το Systrace στη συνδεδεμένη συσκευή και εμφανίζει τα αποτελέσματα απευθείας στο παράθυρο του Android Studio. Αυτό εξαλείφει την ανάγκη εργασίας με τη γραμμή εντολών για βασικές περιπτώσεις, διατηρώντας παράλληλα την πλήρη λειτουργικότητα — όλες τις κατηγορίες ιχνών, φιλτράρισμα και διαδραστική γραμμή χρόνου. Η απόδοση της συσκευής κατά την ιχνηλάτηση μειώνεται ελαφρώς, καθώς το ftrace είναι σχεδιασμένο για ελάχιστη επιβάρυνση.

Πώς λειτουργεί το Systrace

Systrace χρησιμοποιεί δύο μηχανισμούς συλλογής δεδομένων: ftrace σε επίπεδο πυρήνα για συμβάντα συστήματος και atrace στο χώρο χρήστη για ετικέτες ειδικές για Android. Το ftrace καταγράφει εναλλαγές περιβάλλοντος (sched_switch), αλλαγές συχνότητας CPU (cpu_frequency), διακοπές (irq_handler_entry) και άλλα συμβάντα. Το atrace προσθέτει ετικέτες από το πλαίσιο Android — έναρξη και λήξη απόδοσης καρέ, κλήσεις SurfaceFlinger και συναλλαγές Binder.

Αλυσίδα απόδοσης καρέ στο Systrace

Βασική δυνατότητα του Systrace — οπτικοποίηση της αλυσίδας απόδοσης κάθε καρέ: εφαρμογή → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Εάν σε οποιοδήποτε στάδιο προκύψει καθυστέρηση, το Systrace δείχνει την ακριβή αιτία: η εφαρμογή δεν πρόλαβε να προετοιμάσει τον buffer, το SurfaceFlinger περίμενε VSync ή το HWC δεν μπόρεσε να συνθέσει τα στρώματα. Το Frame Lifecycle στη γραμμή χρόνου είναι χρωματισμένο ανάλογα με την κατάσταση: πράσινο (στην ώρα), κίτρινο (καθυστέρηση), κόκκινο (παράλειψη). Αυτή η οπτικοποίηση είναι το κύριο εργαλείο για τη βελτιστοποίηση της απόδοσης UI.

Κατηγορίες ιχνών

Systrace υποστηρίζει πάνω από 20 κατηγορίες ιχνών, καθεμία από τις οποίες περιλαμβάνει ένα σύνολο σχετικών συμβάντων. Σημαντικές κατηγορίες: gfx (απόδοση γραφικών), input (επεξεργασία εισόδου), view (σύστημα View), webview (WebView), power (κατανάλωση ενέργειας), hal (αφαίρεση υλικού). Για προφίλ παιχνιδιών, η κατηγορία gfx με λεπτομέρεια έως εντολές GPU μέσω AGI (Android GPU Inspector) είναι χρήσιμη.

Βασικές δυνατότητες του Systrace

Systrace παρέχει ένα μοναδικό σύνολο δυνατοτήτων για Android που δεν είναι διαθέσιμες σε άλλους profiler: γραμμή χρόνου συστήματος, μετρήσεις σε επίπεδο πυρήνα και αυτόματη ανίχνευση προβλημάτων.

Διαδραστική γραμμή χρόνου

Η αναφορά HTML του Systrace περιέχει μια πολυεπίπεδη γραμμή χρόνου, όπου κάθε ίχνος αντιστοιχεί σε μία διεργασία ή νήμα. Η χρονική κλίμακα μπορεί να μεγεθυνθεί και να σμικρυνθεί, τα συμβάντα μπορούν να κάνουν κλικ για να δείτε λεπτομέρειες (διάρκεια, διεργασία έναρξης, πρόσθετα ορίσματα). Η κωδικοποίηση χρωμάτων βοηθά στον γρήγορο προσανατολισμό: πράσινα μπλοκ — εργασία διεργασίας, μπλε — αναμονή, πορτοκαλί — διακοπή, λευκό — αδράνεια.

Μηνύματα Alert

Το Systrace αναλύει αυτόματα το ίχνος και εμφανίζει μηνύματα Alert με ένδειξη των προβληματικών σημείων. Για παράδειγμα: “Buffer underrun — Το SurfaceFlinger δεν πρόλαβε να λάβει τον buffer πριν το VSync” ή “Long Binder transaction — 42 ms στο νήμα Binder_1”. Κάθε alert περιέχει έναν σύνδεσμο προς το αντίστοιχο τμήμα της γραμμής χρόνου και μια σύσταση για διόρθωση. Αυτό εξοικονομεί ώρες χειροκίνητης ανάλυσης και είναι ένας από τους κύριους λόγους για τη χρήση του Systrace αντί της χειροκίνητης καταγραφής.

Μέθοδος Trace.beginSection

Ο προγραμματιστής μπορεί να προσθέσει δικές του ετικέτες στο ίχνος Systrace μέσω του API Trace.beginSection και Trace.endSection. Αυτό επιτρέπει την παρακολούθηση της εκτέλεσης κρίσιμων τμημάτων κώδικα απευθείας στη γραμμή χρόνου συστήματος — για παράδειγμα, να σημειωθεί η έναρξη και η λήξη της φόρτωσης δεδομένων ή του υπολογισμού διάταξης. Οι ετικέτες εμφανίζονται ως ξεχωριστά μπλοκ στο ίχνος της εφαρμογής και είναι ορατές δίπλα σε συμβάντα συστήματος.

ΚατηγορίαΔεδομέναΤυπική χρήση
schedΕναλλαγές περιβάλλοντος, καταστάσεις αδράνειαςΜπλοκάρισμα νημάτων, contention
gfxVSync, προετοιμασία buffer, HWCΠτώση καρέ, jank
binderΣυναλλαγές Binder, καθυστέρησηΚαθυστερήσεις IPC, απομακρυσμένες κλήσεις
freqΣυχνότητα CPU, scaling governorThrottling, κατανάλωση ενέργειας
gfx + AGIΕντολές GPU, shadersΑπόδοση παιχνιδιών

Πώς να εκτελέσετε το 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. Μετά από 5–30 δευτερόλεπτα πατήστε Stop — το Android Studio θα εκτελέσει το Systrace στη συσκευή, θα περιμένει την ολοκλήρωση και θα φορτώσει το αποτέλεσμα. Περιορισμός: η εγγραφή είναι δυνατή μόνο όσο το Profiler είναι ανοιχτό, το οποίο δεν είναι βολικό για μεγάλα σενάρια ή αυτοματοποίηση.

Εκτέλεση από γραμμή εντολών

Για πιο ευέλικτο έλεγχο, χρησιμοποιήστε το σενάριο systrace.py. Καθορίστε τις κατηγορίες ιχνών, τη διάρκεια και το όνομα του αρχείου εξόδου. Παράδειγμα: καταγραφή δεδομένων gfx, input και sched για 10 δευτερόλεπτα. Για εκτέλεση απαιτείται Python 2.7+ και συνδεδεμένη συσκευή με εντοπισμό σφαλμάτων USB. Σε Android 12+, το Systrace έχει αντικατασταθεί από το Perfetto — η εντολή παραμένει ίδια, αλλά το σενάριο ανακατευθύνει τις κλήσεις στο perfetto.

bash
# Βασική εκτέλεση systrace για 10 δευτερόλεπτα
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Μόνο κατηγορία gfx για ανάλυση UI
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Ρύθμιση προσαρμοσμένων ετικετών στον κώδικα

Για να εμφανιστεί ο κώδικάς σας στη γραμμή χρόνου του Systrace, περικλείστε το κρίσιμο τμήμα σε Trace.beginSection / Trace.endSection. Είναι σημαντικό τα beginSection και endSection να είναι αυστηρά ζευγαρωμένα — διαφορετικά το Systrace θα εμφανίσει εσφαλμένη γραμμή χρόνου. Στο 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. Περιέχει διαδραστική γραμμή χρόνου, πίνακα επιλογής διεργασιών, λίστα μηνυμάτων alert και βασικές μετρήσεις (ρυθμός καρέ, χρήση CPU, συναλλαγές Binder). Η κατανόηση της δομής της αναφοράς είναι βασική δεξιότητα για αποτελεσματική προφίλ.

Γραμμή χρόνου και πλοήγηση

Η γραμμή χρόνου εμφανίζει τον χρόνο από αριστερά προς τα δεξιά. Κάθε διεργασία και νήμα — ξεχωριστό ίχνος. Τα πλήκτρα W/S μεγεθύνουν/σμικρύνουν, τα A/D μετακινούνται στον χρόνο. Επιλέξτε μια περιοχή με το ποντίκι για μεγέθυνση ενός τμήματος. Οι γραμμές VSync δείχνουν τα όρια καρέ (κάθε 16.6 ms στα 60 FPS). Εάν μεταξύ δύο γραμμών VSync δεν χωράει ένας πλήρης κύκλος απόδοσης — το καρέ έχει παραλειφθεί. Δώστε προσοχή στο ίχνος SurfaceFlinger: εάν είναι απασχολημένο για μεγάλο χρονικό διάστημα (πορτοκαλί μπλοκ), η σύνθεση στρωμάτων επιβραδύνει τη συνολική απόδοση.

Ανάλυση μηνυμάτων alert

Ο πίνακας Alerts στην αριστερή πλευρά της αναφοράς περιέχει αυτόματα ανιχνευμένα προβλήματα. Κάθε alert είναι κλικάρισμα — κατά το κλικ, η γραμμή χρόνου μετακινείται στην προβληματική στιγμή. Τα πιο συνηθισμένα alert: “Long Sync” (μεγάλος συγχρονισμός νήματος), “Scheduling Delay” (καθυστέρηση χρονοπρογραμματιστή), “Buffer Overrun” (υπερχείλιση buffer SurfaceFlinger). Εάν ένα alert εμφανίζει τιμή περίπου 100 ms για το Scheduling Delay, αυτό υποδεικνύει άμεσα ότι το νήμα UI περίμενε CPU λόγω φόρτου παρασκηνίου — τα βαριά υπολογιστικά φορτία πρέπει να μεταφερθούν σε Worker Thread.

Frame Lifecycle και jank

Για ανάλυση χαμένων καρέ, ενεργοποιήστε τα ίχνη SurfaceFlinger και app.gfx. Κάθε καρέ εμφανίζεται ως ορθογώνιο: πράσινο (≤16 ms), κίτρινο (16–32 ms), κόκκινο (>32 ms). Εάν βλέπετε ένα κόκκινο ορθογώνιο στο ίχνος εφαρμογής, κάντε κλικ πάνω του — το Systrace θα δείξει ποια μέθοδος (ή κλήση συστήματος) υπερέβη το όριο. Σύμφωνα με την Google (Android Performance Patterns, 2023), το 70% των προβλημάτων jank προκαλείται από μεγάλο onBindViewHolder ή συχνό GC.

Systrace vs Perfetto: μετάβαση στη νέα μορφή

Perfetto είναι ο διάδοχος του Systrace, που παρουσιάστηκε από την Google στο Android 9 (Pie) ως πειραματικό εργαλείο και έγινε το κύριο από το Android 12. Το Perfetto χρησιμοποιεί σύγχρονη μορφή protobuf, υποστηρίζει μεγάλες συνεδρίες (ώρες αντί για δευτερόλεπτα) και έχει Web UI για προβολή ιχνών. Ας εξετάσουμε τις βασικές διαφορές μεταξύ των δύο συστημάτων.

ΚριτήριοSystracePerfetto
ΜορφήΑναφορά HTML (trace.html)Protobuf (.trace / .perfetto-trace)
ΔιάρκειαΈως 60 δευτερόλεπταΏρες, gigabytes δεδομένων
ΔιεπαφήΕνσωματωμένο HTMLWeb 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.

Αναζήτηση jank κατά την κύλιση RecyclerView

Εκτελέστε το Systrace με κατηγορία gfx για 10 δευτερόλεπτα, κυλήστε τη λίστα στην εφαρμογή. Στην αναφορά, βρείτε τμήματα με κόκκινα καρέ. Κάντε κλικ στο προβληματικό καρέ και κοιτάξτε το ίχνος εφαρμογής — εάν υπάρχει μπλοκ “inflateLayout” ή “onBindViewHolder” με πλάτος >16 ms, το πρόβλημα είναι στη διάταξη ή στη σύνδεση δεδομένων. Λύση: βελτιστοποιήστε τη διάταξη (μειώστε το βάθος ViewGroup, ViewStub), μεταφέρετε τη φόρτωση εικόνων στο Glide με onAttachedToWindow.

Διάγνωση GC Throughput

Το Systrace με κατηγορία freq και sched επιτρέπει να δείτε πόσο συχνά οι κύκλοι GC εκτοπίζουν το νήμα UI. Βρείτε το ίχνος εφαρμογής στη γραμμή χρόνου — εάν βλέπετε περιοδικά μπλοκ με διάρκεια 20–50 ms με όνομα “Concurrent GC”, ο συλλέκτης σκουπιδιών λειτουργεί πολύ συχνά. Προσθέστε την κατηγορία “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 να εκτελεστεί χωρίς δικαιώματα root;

Ναι, για την εκτέλεση του Systrace δεν απαιτείται πρόσβαση root. Το εργαλείο χρησιμοποιεί το atrace, το οποίο είναι διαθέσιμο σε οποιαδήποτε συσκευή με ενεργοποιημένο τον εντοπισμό σφαλμάτων USB. Ορισμένες κατηγορίες (power, freq) μπορεί να απαιτούν υπογραφή συστήματος, αλλά οι βασικές (gfx, sched, input) λειτουργούν σε όλες τις συσκευές.

Ποιο είναι το μέγιστο μέγεθος αρχείου ίχνους;

Ο περιορισμός των 60 δευτερολέπτων σχετίζεται με τον όγκο του κυκλικού buffer ftrace — κατά τη μακρά εγγραφή, ο buffer αντικαθίσταται. Το Perfetto αφαιρεί αυτόν τον περιορισμό: μπορείτε να εγγράψετε ώρες και να λάβετε ίχνη μεγέθους έως αρκετά gigabytes με μεταφορά μέσω USB ή εγγραφή ροής σε δίσκο.

Γιατί η αναφορά HTML δεν περιέχει δεδομένα της εφαρμογής μου;

Πιθανές αιτίες: η εφαρμογή δεν έχει μετατραπεί σε λειτουργία debuggable, δεν έχει προστεθεί η σημαία android:debuggable=”true” στο manifest ή χρησιμοποιείτε έκδοση release. Ελέγξτε επίσης αν στις κατηγορίες έχει καθοριστεί το --app=com.example.app — διαφορετικά το Systrace καταγράφει μόνο διεργασίες συστήματος.

Πώς μπορώ να προσθέσω τη δική μου ετικέτα στο Systrace από native κώδικα;

Για C++, χρησιμοποιήστε ATRACE_BEGIN και ATRACE_END από τη βιβλιοθήκη libcutils. Συμπεριλάβετε το αρχείο κεφαλίδας και περικλείστε το επιθυμητό τμήμα. Η ετικέτα θα εμφανιστεί στο Systrace στο ίχνος της διεργασίας σας, το οποίο είναι ιδιαίτερα χρήσιμο για ανάλυση μηχανών παιχνιδιών (Unity, Unreal).

Με τι να αντικαταστήσω το Systrace σε Android 12+;

Σε Android 12 και νεότερες εκδόσεις, χρησιμοποιήστε Perfetto. Εγκαταστήστε τον πράκτορα perfetto στη συσκευή μέσω ADB, ξεκινήστε εγγραφή σε μορφή JSON. Γρήγορη προβολή μέσω Perfetto Web UI (ui.perfetto.dev) και για CI — εξαγωγή εντολών με TraceProcessor σε Python.

Σύνοψη

  • Systrace — ιχνηλάτης συστήματος Android, που λειτουργεί σε επίπεδο πυρήνα μέσω ftrace και atrace
  • Δείχνει το φορτίο CPU, GPU, SurfaceFlinger και συναλλαγές Binder σε μία γραμμή χρόνου
  • Η αναφορά HTML περιέχει αυτόματα μηνύματα Alert με ένδειξη προβλημάτων και συστάσεων
  • Εκτέλεση μέσω Android Studio Profiler ή γραμμής εντολών με systrace.py
  • Το νήμα UI είναι κρίσιμο: κάθε καρέ πρέπει να χωράει σε 16.6 ms για 60 FPS
  • Σε Android 12+, το Systrace αντικαταστάθηκε από Perfetto με υποστήριξη για μεγάλες συνεδρίες και ερωτήματα SQL
  • Συνιστάται ο συνδυασμός Systrace και Traceview για προφίλ συστήματος και εφαρμογής

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης