หลังจากดึงข้อมูลโปรไฟล์จากอุปกรณ์ทดสอบหรือดาวน์โหลดจากแบ็กเอนด์ คุณจะเปิดไฟล์ใน Perfetto UI เพื่อตรวจสอบไทม์ไลน์ สถานะชุดข้อความ และกราฟการเก็บรักษาหน่วยความจำได้ หน้านี้จะอธิบายวิธีไปยังส่วนต่างๆ ของการติดตามของระบบที่ปกปิดข้อมูลบางส่วนและฮีปดัมพ์ของ Java ที่บันทึกด้วย ProfilingManager
แสดงภาพการติดตามของระบบ
เปิดไฟล์ .perfetto-trace ใน Perfetto UI เพื่อตรวจสอบกิจกรรมของ CPU และเทรดเมื่อเวลาผ่านไป
เพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ ProfilingManager จะปกปิดการติดตามของระบบโดยรวมกิจกรรม CPU จากกระบวนการอื่นๆ ทั้งหมดไว้ในแทร็ก OtherProcesses เดียว
การตรวจสอบแทร็กที่รวมกันนี้ยังช่วยให้คุณระบุได้ว่าความช้าในแอปเกิดจากคอขวดภายในหรือภาระงานโดยรวมของอุปกรณ์
รูปที่ 2 ไฮไลต์ส่วนหลักๆ ของการติดตามของระบบที่ปกปิดข้อมูลบางส่วน
- รายการ CPU: แสดงโปรเซสเซอร์ทั้งหมดที่พร้อมใช้งานในอุปกรณ์
- งาน CPU: แสดงเทรดที่ CPU แต่ละตัวกำลังดำเนินการ
- มุมมองกระบวนการอื่นๆ: แสดงทรัพยากร CPU ที่กระบวนการอื่นๆ ใช้
- มุมมองกระบวนการ: แสดงกระบวนการของแอป
- มุมมองชุดข้อความ: แสดงชุดข้อความที่ทำงานภายในกระบวนการและสถานะชุดข้อความ (เรียกใช้ได้ (R), กำลังทำงาน (R), อยู่ในโหมดสลีป (S), อยู่ในโหมดสลีปแบบขัดจังหวะไม่ได้ (D)) ซึ่งแมปกับสถานะกระบวนการของ Linux โดยตรง
- ส่วนการติดตาม: ส่วนนี้แสดงคำอธิบายประกอบการติดตามที่เพิ่มโดยนักพัฒนาแอปหรือเฟรมเวิร์ก คำอธิบายประกอบเหล่านี้ครอบคลุมการคำนวณระหว่าง
Trace.beginSectionและTrace.endSection
ดูข้อมูลเพิ่มเติมเกี่ยวกับ UI ของ Perfetto และการแสดงภาพการติดตามได้ที่เอกสารประกอบของ Perfetto
แสดงภาพฮีปดัมป์ของ Java
เมื่อบันทึกฮีปดัมป์ของ Java โดยใช้ PROFILING_TYPE_JAVA_HEAP_DUMP แล้ว ให้เปิดไฟล์ .perfetto-java-heap-dump ที่ได้ใน Perfetto UI เพื่อระบุหน่วยความจำรั่วไหลหรือเพิ่มประสิทธิภาพการใช้งานหน่วยความจำ ในเครื่องมือสำรวจ Heapdump คุณสามารถสำรวจกราฟฮีป ตรวจสอบกราฟ Flame ของขนาดออบเจ็กต์สะสม และเรียกดูคลาส ออบเจ็กต์ และ Dominator ดังที่แสดงในรูปที่ 3
ความแตกต่างระหว่างฮีปดัมป์ของ 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 ได้ด้วย