Systrace — คืออะไร เครื่องมือติดตามระบบ Android

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-03-31 เวลาอ่าน: 9 นาที

Systrace เป็นเครื่องมือติดตามระบบ Android ที่รวบรวมข้อมูลเกี่ยวกับเคอร์เนล Linux, CPU, GPU และกระบวนการทั้งหมดของระบบในช่วงเวลาสั้น ๆ ซึ่งแตกต่างจาก 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 และอื่น ๆ ข้อมูลจะถูกรวบรวมในบัฟเฟอร์วงแหวนของเคอร์เนลและหลังจากหยุดจะถูกรวมเป็นไฟล์ trace.html เดียวที่สามารถเปิดได้ในเบราว์เซอร์ใดก็ได้

Systrace ในบริบทของ Android Studio

ตั้งแต่ Android Studio 3.1 เป็นต้นไป Systrace ถูกรวมอยู่ใน CPU Profiler ในโหมด “Trace System Calls” โปรไฟเลอร์จะเรียกใช้ 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 (ตัวประกอบ) → จอภาพ หากเกิดความล่าช้าในขั้นตอนใด Systrace จะแสดงสาเหตุที่แน่ชัด: แอปพลิเคชันไม่ได้เตรียมบัฟเฟอร์ทันเวลา SurfaceFlinger กำลังรอ VSync หรือ HWC ไม่สามารถประกอบเลเยอร์ได้ วงจรชีวิตของเฟรม บนไทม์ไลน์จะถูกเข้ารหัสสีตามสถานะ: สีเขียว (ทันเวลา), สีเหลือง (ล่าช้า), สีแดง (ตก) การแสดงภาพนี้เป็นเครื่องมือหลักในการเพิ่มประสิทธิภาพ UI

หมวดหมู่การติดตาม

Systrace รองรับหมวดหมู่การติดตามมากกว่า 20 หมวดหมู่ แต่ละหมวดหมู่รวมถึงชุดของเหตุการณ์ที่เกี่ยวข้อง หมวดหมู่ที่สำคัญได้แก่: gfx (การเรนเดอร์กราฟิก), input (การประมวลผลอินพุต), view (ระบบ View), webview (WebView), power (การใช้พลังงาน), hal (เลเยอร์นามธรรมฮาร์ดแวร์) สำหรับการทำโปรไฟล์เกม หมวดหมู่ gfx พร้อมรายละเอียดคำสั่ง GPU ผ่าน AGI (Android GPU Inspector) มีประโยชน์

คุณสมบัติหลักของ Systrace

Systrace มอบชุดความสามารถที่ไม่เหมือนใครสำหรับ Android ที่ไม่มีในโปรไฟเลอร์อื่น ๆ: ไทม์ไลน์ของระบบ, เมตริกระดับเคอร์เนลและการตรวจจับปัญหาโดยอัตโนมัติ

ไทม์ไลน์แบบโต้ตอบ

รายงาน HTML ของ Systrace มีไทม์ไลน์หลายระดับที่แต่ละเลนตรงกับหนึ่งกระบวนการหรือเธรด คุณสามารถซูมเข้าและออกจากสเกลเวลา คลิกที่เหตุการณ์เพื่อดูรายละเอียด (ระยะเวลา กระบวนการเริ่มต้น อาร์กิวเมนต์เพิ่มเติม) การเข้ารหัสสี ช่วยในการนำทางอย่างรวดเร็ว: บล็อกสีเขียว — กระบวนการกำลังทำงาน, สีน้ำเงิน — กำลังรอ, สีส้ม — การขัดจังหวะ, สีขาว — ว่าง

ข้อความแจ้งเตือน

Systrace วิเคราะห์ร่องรอยโดยอัตโนมัติและแสดง ข้อความแจ้งเตือน ที่ระบุพื้นที่ที่มีปัญหา ตัวอย่างเช่น: “Buffer underrun — SurfaceFlinger ไม่ได้รับบัฟเฟอร์ก่อน VSync” หรือ “Long Binder transaction — 42 ms ในเธรด Binder_1” การแจ้งเตือนแต่ละครั้งมีลิงก์ไปยังส่วนที่เกี่ยวข้องของไทม์ไลน์และคำแนะนำในการแก้ไข ซึ่งช่วยประหยัดเวลาการวิเคราะห์ด้วยตนเองหลายชั่วโมงและเป็นหนึ่งในเหตุผลหลักในการใช้ Systrace แทนการบันทึกด้วยตนเอง

เมธอด Trace.beginSection

นักพัฒนาสามารถเพิ่มแท็กที่กำหนดเองลงในร่องรอย Systrace ผ่าน API Trace.beginSection และ Trace.endSection ซึ่งช่วยให้สามารถติดตามการทำงานของส่วนโค้ดที่สำคัญได้โดยตรงบนไทม์ไลน์ของระบบ — ตัวอย่างเช่น การทำเครื่องหมายจุดเริ่มต้นและสิ้นสุดของการโหลดข้อมูลหรือการคำนวณเลย์เอาต์ แท็กจะปรากฏเป็นบล็อกแยกต่างหากบนเลนของแอปพลิเคชันและมองเห็นได้พร้อมกับเหตุการณ์ของระบบ

หมวดหมู่ข้อมูลการใช้งานทั่วไป
schedการสลับบริบท, สถานะว่างการบล็อกเธรด, การแย่งชิง
gfxVSync, การเตรียมบัฟเฟอร์, HWCเฟรมตก, กระตุก
binderธุรกรรม Binder, ความหน่วงความล่าช้า IPC, การเรียกระยะไกล
freqความถี่ CPU, ตัวปรับขนาดการลดความเร็ว, การใช้พลังงาน
gfx + AGIคำสั่ง GPU, เชเดอร์ประสิทธิภาพเกม

วิธีเรียกใช้ Systrace

การเรียกใช้ Systrace สามารถทำได้สองวิธี: ผ่าน CPU Profiler ของ Android Studio (โหมด “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 การใช้ส่วนขยายแบบอินไลน์เพื่อรับประกันการปิดส่วนแม้ในกรณีที่มีข้อยกเว้นนั้นสะดวก

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 ประกอบด้วยไทม์ไลน์แบบโต้ตอบ แผงเลือกกระบวนการ รายการข้อความแจ้งเตือน และเมตริกสำคัญ (อัตราเฟรม การใช้งาน CPU ธุรกรรม Binder) การทำความเข้าใจโครงสร้างรายงานเป็นทักษะสำคัญสำหรับการทำโปรไฟล์ที่มีประสิทธิภาพ

ไทม์ไลน์และการนำทาง

ไทม์ไลน์แสดงเวลาจากซ้ายไปขวา แต่ละกระบวนการและเธรดเป็นเลนแยกกัน ปุ่ม W/S ซูมเข้า/ออก, A/D เคลื่อนที่ตามเวลา เลือกพื้นที่ด้วยเมาส์เพื่อขยายส่วน เส้น VSync แสดงขอบเขตเฟรม (ทุก 16.6 ms ที่ 60 FPS) หากรอบการเรนเดอร์เต็มไม่พอดีระหว่างเส้น VSync สองเส้น — เฟรมจะตก ให้ความสนใจกับเลน SurfaceFlinger: หากมันไม่ว่างเป็นเวลานาน (บล็อกสีส้ม) การประกอบเลเยอร์กำลังทำให้การเรนเดอร์โดยรวมช้าลง

การวิเคราะห์ข้อความแจ้งเตือน

แผงการแจ้งเตือนทางด้านซ้ายของรายงานมีปัญหาที่ตรวจพบโดยอัตโนมัติ การแจ้งเตือนแต่ละครั้งสามารถคลิกได้ — เมื่อคลิก ไทม์ไลน์จะย้ายไปยังช่วงเวลาที่มีปัญหา การแจ้งเตือนที่พบบ่อยที่สุด: “Long Sync” (การซิงค์เธรดยาว), “Scheduling Delay” (ความล่าช้าของตัวกำหนดตาราง), “Buffer Overrun” (บัฟเฟอร์ SurfaceFlinger ล้น) หากการแจ้งเตือนแสดงค่า ~100 ms สำหรับ Scheduling Delay แสดงว่าเธรด UI กำลังรอ CPU เนื่องจากโหลดพื้นหลัง — การคำนวณหนักควรย้ายไปยัง Worker Thread

วงจรชีวิตของเฟรมและการกระตุก

เพื่อวิเคราะห์เฟรมที่ตก ให้เปิดเลน SurfaceFlinger และ app.gfx แต่ละเฟรมจะแสดงเป็นสี่เหลี่ยมผืนผ้า: สีเขียว (≤16 ms), สีเหลือง (16–32 ms), สีแดง (>32 ms) หากคุณเห็นสี่เหลี่ยมผืนผ้าสีแดงบนเลนแอป ให้คลิกที่มัน — Systrace จะแสดงเมธอดเฉพาะ (หรือการเรียกระบบ) ที่เกินขีดจำกัด ตามข้อมูลของ Google (Android Performance Patterns, 2023) 70% ของปัญหาการกระตุกเกิดจาก onBindViewHolder ที่ช้าหรือ GC บ่อยครั้ง

Systrace กับ Perfetto: การเปลี่ยนไปใช้รูปแบบใหม่

Perfetto เป็นผู้สืบทอดของ Systrace ที่ Google เปิดตัวใน Android 9 (Pie) ในฐานะเครื่องมือทดลองและกลายเป็นโซลูชันหลักตั้งแต่ Android 12 เป็นต้นไป Perfetto ใช้รูปแบบข้อมูล protobuf ที่ทันสมัย รองรับเซสชันยาว (ชั่วโมงแทนวินาที) และมี Web UI สำหรับดูร่องรอย มาดูความแตกต่างหลักระหว่างสองระบบกัน

เกณฑ์SystracePerfetto
รูปแบบรายงาน HTML (trace.html)Protobuf (.trace / .perfetto-trace)
ระยะเวลาสูงสุด 60 วินาทีชั่วโมง, ข้อมูลกิกะไบต์
อินเทอร์เฟซHTML ในตัวWeb UI (ui.perfetto.dev)
หมวดหมู่คงที่ (ftrace + atrace)ขยายได้ (คำสั่ง SQL ไปยังร่องรอย)
ความคล่องตัวAndroid เท่านั้นAndroid, Linux, Chrome, Windows

แม้จะมีการเปลี่ยนไปใช้ Perfetto ทักษะ Systrace ยังคงมีความเกี่ยวข้อง: บนอุปกรณ์ที่ใช้ Android 11 และต่ำกว่าจะใช้เป็นค่าเริ่มต้น และ Perfetto ยังคงความเข้ากันได้ย้อนหลังกับหมวดหมู่ Systrace ใน CPU Profiler ของ Android Studio จะใช้ Perfetto สำหรับอุปกรณ์ใหม่และ Systrace สำหรับอุปกรณ์เก่า — โปร่งใสสำหรับผู้ใช้ สำหรับ CI/CD แนะนำให้ใช้ Perfetto เนื่องจากรูปแบบของมันสามารถ ประมวลผล โดยอัตโนมัติผ่าน Python และ SQL

ตัวอย่างการใช้งาน Systrace

เพื่อฝึกฝน Systrace ในทางปฏิบัติ ลองพิจารณาสองสถานการณ์: การหาสาเหตุของเฟรมที่ตกระหว่างการเลื่อนและการวินิจฉัย GC บ่อยครั้งที่บล็อกเธรด UI

การหากระตุกระหว่างการเลื่อน RecyclerView

เรียกใช้ Systrace ด้วยหมวดหมู่ gfx เป็นเวลา 10 วินาที เลื่อนรายการในแอป ในรายงาน ให้ค้นหาส่วนที่มีเฟรมสีแดง คลิกที่เฟรมที่มีปัญหาและดูเลนแอป — หากมีบล็อก “inflateLayout” หรือ “onBindViewHolder” ที่กว้างกว่า 16 ms ปัญหาอยู่ที่การพองเลย์เอาต์หรือการผูกข้อมูล วิธีแก้ไข: ปรับแต่ง เลย์เอาต์ (ลด ViewGroup ที่ลึก, ViewStub) ย้ายการโหลดรูปภาพไปยัง Glide ด้วย onAttachedToWindow

การวินิจฉัยปริมาณงาน GC

Systrace ด้วยหมวดหมู่ freq และ sched ช่วยให้เห็นว่า GC cycle เกิดขึ้นบ่อยเพียงใดที่แทรกแซงเธรด 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 วินาทีเกี่ยวข้องกับความจุของบัฟเฟอร์วงแหวน ftrace — ระหว่างการบันทึกนาน บัฟเฟอร์จะถูกเขียนทับ Perfetto ลบข้อจำกัดนี้: คุณสามารถบันทึกเป็นชั่วโมงและได้รับร่องรอยขนาดสูงสุด หลายกิกะไบต์ ผ่านการถ่ายโอน USB หรือการสตรีมลงดิสก์

ทำไมข้อมูลแอปของฉันไม่ปรากฏในรายงาน HTML?

สาเหตุที่เป็นไปได้: แอปไม่ได้อยู่ในโหมดดีบัก, ไม่ได้ตั้งค่าแฟล็ก android:debuggable=“true” ใน manifesต์, หรือกำลังใช้บิลด์เผยแพร่ ตรวจสอบว่าคุณระบุ --app=com.example.app ในหมวดหมู่ — มิฉะนั้น Systrace จะจับเฉพาะกระบวนการของระบบเท่านั้น

จะเพิ่มแท็กที่กำหนดเองไปยัง Systrace จากโค้ดเนทีฟได้อย่างไร?

สำหรับ 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 มี ข้อความแจ้งเตือน อัตโนมัติพร้อมการระบุปัญหาและคำแนะนำ
  • เรียกใช้ผ่าน Android Studio Profiler หรือบรรทัดคำสั่งด้วย systrace.py
  • เธรด UI มีความสำคัญ: แต่ละเฟรมต้องอยู่ใน 16.6 ms สำหรับ 60 FPS
  • บน Android 12+ Systrace ถูกแทนที่ด้วย Perfetto ที่รองรับเซสชันยาวและคำสั่ง SQL
  • แนะนำให้รวม Systrace และ Traceview สำหรับการทำโปรไฟล์ทั้งระบบและแอปพลิเคชัน

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม