วิเคราะห์โปรไฟล์ด้วย AI

เนื่องจากโปรไฟล์ ProfilingManager ใช้รูปแบบ Perfetto มาตรฐานและค้นหาด้วย PerfettoSQL ได้ คุณจึงสามารถจับคู่เอเจนต์การเขียนโค้ด AI กับทักษะ Perfetto AI เพื่อวิเคราะห์สาเหตุของปัญหาโดยอัตโนมัติในพื้นที่ทำงานโดยตรง แทนที่จะไปยังไทม์ไลน์ใน Perfetto UI ด้วยตนเองหรือเขียนการค้นหาที่กำหนดเองกับไลบรารีมาตรฐาน Perfetto

  1. โหลดโปรไฟล์: Agent จะเปิดโปรไฟล์ที่รวบรวมไว้โดยใช้ trace_processor ของ Perfetto
  2. เรียกใช้การค้นหาเพื่อวิเคราะห์: ตัวแทนจะค้นหาโมดูลไลบรารีมาตรฐาน (เช่น android.frames.timeline สำหรับอาการกระตุกหรือ android.memory.heap_graph.dominator_tree สำหรับหน่วยความจำรั่วไหล) และปรับแต่งการค้นหาซ้ำๆ โดยใช้ทักษะ Perfetto AI
  3. เชื่อมโยงกับซอร์สโค้ด: ตัวแทนจะแมปส่วนการติดตามที่กำหนดเอง สแต็กการเรียกใช้ที่สุ่มตัวอย่าง หรือชื่อคลาสที่เก็บไว้ในโปรไฟล์กับไฟล์ต้นฉบับ Kotlin หรือ Java โดยตรง และเสนอวิธีแก้ไข

ตั้งค่าทักษะ AI ของ Perfetto

ทักษะ Perfetto AI แบบโอเพนซอร์สจะสอน Agent การเขียนโค้ดเกี่ยวกับวิธีเรียกใช้ trace_processor, เขียน PerfettoSQL และทำตามเวิร์กโฟลว์ที่มีคำแนะนำสำหรับการวิเคราะห์หน่วยความจำและ CPU ของ Android การติดตั้งแต่ละครั้งจะรวม Wrapper ของ trace_processor ไว้ด้วย คุณจึงไม่จำเป็นต้องติดตั้ง trace_processor แยกต่างหาก

  • ติดตั้งด้วย AI: เรียกใช้พรอมต์ต่อไปนี้ใน Agent การเขียนโค้ดด้วย AI

    Following instructions from https://perfetto.dev/docs/getting-started/using-ai set up the Perfetto AI skill to be usable by any agent
    
  • ติดตั้งด้วยตนเอง: ทำตามวิธีการตั้งค่าในการใช้ AI กับ Perfetto สำหรับ Agent ของคุณ (เช่น Claude Code, Codex, Cursor, Antigravity หรือ OpenCode)

ตัวอย่างเวิร์กโฟลว์

วางโปรไฟล์ที่บันทึกไว้อย่างน้อย 1 รายการในพื้นที่ทำงาน แล้วแจ้งให้ AI Agent ตรวจสอบ คุณสามารถวิเคราะห์โปรไฟล์เดียวเพื่อวินิจฉัยปัญหาแต่ละรายการหรือส่งหลายโปรไฟล์เพื่อเปรียบเทียบรูปแบบและการถดถอยพร้อมกันหลายรายการได้

วิเคราะห์ฮีปดัมป์ของ Java และ OOM

เมื่อคุณระบุการดัมพ์ฮีป Java ที่บันทึกโดยตรงด้วย PROFILING_TYPE_JAVA_HEAP_DUMP หรือโดยอัตโนมัติผ่านทริกเกอร์ TRIGGER_TYPE_OOM ตัวแทน AI ที่ใช้ทักษะ Perfetto AI จะช่วยคุณระบุสิ่งต่อไปนี้ได้

  • หน่วยความจำรั่วไหล: ออบเจ็กต์ เช่น อินสแตนซ์ Activity หรือ Fragment ที่ถูกทำลาย ซึ่งยังคงเข้าถึงได้จากรูท GC ทั้งที่ควรจะได้รับการเรียกคืน
  • ออบเจ็กต์ที่ซ้ำกันจำนวนมาก: คลาสที่มีจำนวนอินสแตนซ์สูงอย่างไม่คาดคิดซึ่งใช้พื้นที่ฮีปส่วนใหญ่ร่วมกัน
  • การใช้หน่วยความจำที่ไม่มีประสิทธิภาพ: แคชขนาดใหญ่เกินไป โครงสร้างข้อมูลที่ซ้ำซ้อน หรือออบเจ็กต์ Dominator รายการเดียวที่เก็บรักษาหน่วยความจำในปริมาณที่ไม่สมส่วน

หากต้องการตรวจสอบดัมพ์ฮีป OutOfMemoryError และเชื่อมโยงกับซอร์สโค้ดของแอป ให้เรียกใช้พรอมต์ดังต่อไปนี้

Analyze the Perfetto OOM heap dump at </path/to/profile>, which corresponds to
the codebase located at </path/to/codebase> using the Perfetto AI skill and find
the root cause of the OutOfMemoryError.

หากต้องการดูตัวอย่างที่เสร็จสมบูรณ์ของรายงานที่พรอมต์นี้สร้างขึ้น ซึ่งรวมถึงเส้นทางการเก็บรักษา Dominator Tree, สาเหตุของปัญหาในซอร์สโค้ด และการแก้ไขที่เสนอ โปรดดูทำให้การตรวจสอบ OOM เป็นอัตโนมัติด้วย AI Agent ในกรณีศึกษา: แก้ไขข้อบกพร่องของข้อขัดข้อง OOM

วิเคราะห์การติดตามของระบบและ ANR

เมื่อคุณให้การติดตามของระบบที่บันทึกโดยตรงด้วย PROFILING_TYPE_SYSTEM_TRACE หรือโดยอัตโนมัติผ่านทริกเกอร์ TRIGGER_TYPE_ANR AI Agent ที่ใช้ทักษะ Perfetto AI จะช่วยคุณระบุสิ่งต่อไปนี้ได้

  • การบล็อกการดำเนินการของเทรดหลัก: ชิ้นส่วนการติดตามที่ใช้เวลานานหรือการเรียกแบบซิงโครนัสที่ป้องกันไม่ให้เทรด UI ประมวลผลเหตุการณ์อินพุตหรือวาดเฟรมก่อนเกณฑ์ ANR
  • คอขวดของสถานะเทรด: ช่วงเวลาที่เทรดหลักติดอยู่ในสถานะ Sleeping (เช่น การบล็อก I/O ของเครือข่ายหรือการหมดเวลาของ Thread.sleep), Blocked (การแย่งชิงล็อก) หรือ Runnable (ความล่าช้าในการจัดกำหนดการ CPU)
  • การเพิ่มขึ้นอย่างรวดเร็วของ CPU ในเธรดหลัก: การคำนวณที่ใช้ทรัพยากรมากหรือการวนซ้ำที่เข้มงวดซึ่งดำเนินการในเธรด UI โดยตรงแทนที่จะเป็นเธรดเบื้องหลัง

หากต้องการตรวจสอบการติดตามของระบบ ANR และเชื่อมโยงกับซอร์สโค้ดของแอป ให้เรียกใช้พรอมต์ต่อไปนี้

Analyze the Perfetto system trace at </path/to/trace.perfetto-trace>, which
corresponds to an ANR trace, and find the root cause of the ANR using the
Perfetto AI skill. The codebase is located at </path/to/codebase>.

หากต้องการดูตัวอย่างที่เสร็จสมบูรณ์ของรายงานที่พรอมต์นี้สร้างขึ้น ซึ่งรวมถึงรายละเอียดส่วนแบ่งของเทรดหลัก การสร้างช่วงเวลา thread_state ขึ้นใหม่ และการแมปซอร์สโค้ด โปรดดูทำให้การตรวจสอบ ANR เป็นอัตโนมัติด้วย AI Agent ในกรณีศึกษา: แก้ไขข้อบกพร่องของ ANR