แสดงภาพโปรไฟล์ใน Perfetto UI

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

แสดงภาพการติดตามของระบบ

เปิดไฟล์ .perfetto-trace ใน Perfetto UI เพื่อตรวจสอบกิจกรรมของ CPU และเทรดเมื่อเวลาผ่านไป

ไทม์ไลน์ของการติดตามของระบบที่ปกปิดข้อมูลใน UI ของ Perfetto
รูปที่ 1 ตัวอย่างการติดตามที่ปกปิดข้อมูล

เพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ ProfilingManager จะปกปิดการติดตามของระบบโดยรวมกิจกรรม CPU จากกระบวนการอื่นๆ ทั้งหมดไว้ในแทร็ก OtherProcesses เดียว การตรวจสอบแทร็กที่รวมกันนี้ยังช่วยให้คุณระบุได้ว่าความช้าในแอปเกิดจากคอขวดภายในหรือภาระงานโดยรวมของอุปกรณ์

รูปที่ 2 ไฮไลต์ส่วนหลักๆ ของการติดตามของระบบที่ปกปิดข้อมูลบางส่วน

ส่วนที่มีหมายเลขกำกับของการติดตามของระบบที่ปกปิดข้อมูลบางส่วนใน UI ของ Perfetto
รูปที่ 2 ส่วนต่างๆ ของการติดตามที่ปกปิดข้อมูล
  1. รายการ CPU: แสดงโปรเซสเซอร์ทั้งหมดที่พร้อมใช้งานในอุปกรณ์
  2. งาน CPU: แสดงเทรดที่ CPU แต่ละตัวกำลังดำเนินการ
  3. มุมมองกระบวนการอื่นๆ: แสดงทรัพยากร CPU ที่กระบวนการอื่นๆ ใช้
  4. มุมมองกระบวนการ: แสดงกระบวนการของแอป
  5. มุมมองชุดข้อความ: แสดงชุดข้อความที่ทำงานภายในกระบวนการและสถานะชุดข้อความ (เรียกใช้ได้ (R), กำลังทำงาน (R), อยู่ในโหมดสลีป (S), อยู่ในโหมดสลีปแบบขัดจังหวะไม่ได้ (D)) ซึ่งแมปกับสถานะกระบวนการของ Linux โดยตรง
  6. ส่วนการติดตาม: ส่วนนี้แสดงคำอธิบายประกอบการติดตามที่เพิ่มโดยนักพัฒนาแอปหรือเฟรมเวิร์ก คำอธิบายประกอบเหล่านี้ครอบคลุมการคำนวณระหว่าง Trace.beginSection และ Trace.endSection

ดูข้อมูลเพิ่มเติมเกี่ยวกับ UI ของ Perfetto และการแสดงภาพการติดตามได้ที่เอกสารประกอบของ Perfetto

แสดงภาพฮีปดัมป์ของ Java

เมื่อบันทึกฮีปดัมป์ของ Java โดยใช้ PROFILING_TYPE_JAVA_HEAP_DUMP แล้ว ให้เปิดไฟล์ .perfetto-java-heap-dump ที่ได้ใน Perfetto UI เพื่อระบุหน่วยความจำรั่วไหลหรือเพิ่มประสิทธิภาพการใช้งานหน่วยความจำ ในเครื่องมือสำรวจ Heapdump คุณสามารถสำรวจกราฟฮีป ตรวจสอบกราฟ Flame ของขนาดออบเจ็กต์สะสม และเรียกดูคลาส ออบเจ็กต์ และ Dominator ดังที่แสดงในรูปที่ 3

Heapdump Explorer ของ Perfetto UI ที่แสดงกราฟ Flame ของขนาดออบเจ็กต์ฮีปของ Java
รูปที่ 3 กราฟ Flame ของฮีปดัมป์ของ Java ใน Perfetto UI

ความแตกต่างระหว่างฮีปดัมป์ของ ProfilingManager กับฮีปดัมป์ HPROF

ProfilingManager จะบันทึก Perfetto ART Heap Dump (.perfetto-java-heap-dump) ซึ่งแตกต่างจาก Heap Dump ของ .hprof มาตรฐาน (เช่น ที่บันทึกด้วย Debug.dumpHprofData หรือใน Android Studio) โดย ProfilingManager จะบันทึกกราฟการเก็บรักษาออบเจ็กต์และข้อมูลเมตาการปรับขนาดโดยไม่รวมข้อมูลดิบที่จัดเก็บไว้ในออบเจ็กต์ ดังนี้

  • ข้อมูลที่รวบรวม
    • คลาสและประเภท: ชื่อคลาส, ลำดับชั้นของคลาสใหญ่สุด, ClassLoader, ขนาดอินสแตนซ์ และประเภทการอ้างอิง (เช่น คลาสปกติ, อาร์เรย์, สตริง หรือการอ้างอิงแบบ Weak, Soft, Finalizer และ Phantom)
    • อินสแตนซ์และขนาดของออบเจ็กต์: ขนาดระดับออบเจ็กต์ (self_size), ขอบเขตฮีป (HEAP_TYPE_APP, HEAP_TYPE_ZYGOTE หรือ HEAP_TYPE_BOOT_IMAGE) และหน่วยความจำแบบเนทีฟที่เชื่อมโยงซึ่งลงทะเบียนผ่าน NativeAllocationRegistry
    • การอ้างอิงและรูท GC: รูทการเก็บขยะ (เช่น JNI แบบโกลบอลและแบบโลคัล, สแตกเฟรม Java และออบเจ็กต์ชุดข้อความ) และเชนการอ้างอิงระดับฟิลด์ที่แสดงออบเจ็กต์ที่เก็บออบเจ็กต์อื่นไว้และผ่านชื่อฟิลด์ใด
    • เลือกข้อมูลเมตาการปรับขนาด: ข้อมูลเมตาที่ไม่ละเอียดอ่อนสำหรับประเภทเฟรมเวิร์กที่เฉพาะเจาะจง เช่น มิติข้อมูล Bitmap (mWidth และ mHeight)
  • สิ่งที่ละเว้น: ค่าฟิลด์พื้นฐานจริง, เนื้อหาอักขระ String และเพย์โหลดอาร์เรย์ดิบ (byte[], char[] และอาร์เรย์พื้นฐานอื่นๆ) การละเว้นเนื้อหาออบเจ็กต์ดิบจะช่วยปกป้องความเป็นส่วนตัวของผู้ใช้ในอุปกรณ์เวอร์ชันที่ใช้งานจริงและทำให้ไฟล์ Dump มีขนาดเล็กลงอย่างมาก

ขั้นตอนถัดไป

นอกจากการตรวจสอบด้วยภาพใน Perfetto UI แล้ว คุณยังค้นหาโปรไฟล์ด้วย PerfettoSQL, วิเคราะห์การติดตามเป็นกลุ่ม หรือวิเคราะห์โปรไฟล์ด้วย AI ได้ด้วย