คุณบันทึกโปรไฟล์ประสิทธิภาพได้หลายประเภทใน Android การรวบรวมโปรไฟล์จะช่วยคุณแก้ไขข้อบกพร่องที่เกี่ยวข้องกับความเร็วในการทำงานของแอป ปริมาณหน่วยความจำที่ใช้ ปริมาณการใช้พลังงาน และอื่นๆ
เอกสารนี้อธิบายโปรไฟล์ประเภทที่มีประโยชน์มากที่สุดและเวลาที่ควรใช้แต่ละประเภท เพื่อแก้ไขปัญหาด้านประสิทธิภาพที่พบบ่อย
การติดตามระบบ

การติดตามระบบคือโปรไฟล์ที่มีประสิทธิภาพซึ่งมีข้อมูลเกี่ยวกับกระบวนการ เธรด ข้อมูลเวลา การดำเนินการของ CPU และงาน รวมถึงเหตุการณ์ที่ระบบหรือผู้ใช้กำหนด
จากมุมมองของแอป ลักษณะของข้อมูลในร่องรอยอาจครอบคลุมหลายด้าน เช่น เวลาในการตอบสนอง ความหน่วง หน่วยความจำ แบตเตอรี่ และอื่นๆ
การติดตามระบบประกอบด้วยเหตุการณ์ที่ขับเคลื่อนด้วยโค้ดต่อไปนี้ ซึ่งอาจเป็นระบบ หรือผู้ใช้กำหนด เหตุการณ์ที่ขับเคลื่อนด้วยโค้ดคือเหตุการณ์ที่ผู้ใช้เรียกใช้ผ่านการเรียกฟังก์ชันได้
- Trace slices: แสดงเวลาที่อยู่ระหว่างจุดต่างๆ ในโค้ด โดยสามารถเพิ่มได้ด้วย
Trace.beginSection
และTrace.endSection
API - ตัวนับการติดตาม: ค่าตัวเลขที่แสดงเมตริก เช่น ขนาดฮีป โดยเพิ่มได้ด้วย
Trace.setCounter
API
การติดตามระบบยังมีเมตริกที่สร้างได้จากการค้นหา PerfettoSQL และใช้เพื่อทำการวิเคราะห์หรือเปรียบเทียบการติดตามได้
เราขอแนะนำให้ใช้การติดตามระบบเพื่อทำงานต่อไปนี้
วิเคราะห์ปัญหาเวลาในการตอบสนอง การติดตามระบบเหมาะอย่างยิ่งสำหรับการค้นหาปัญหาเวลาในการตอบสนองที่เกิดจากความล่าช้า การรอ หรือปัญหาการจัดกำหนดการ Profiler อื่นๆ เช่น โปรไฟล์ที่อิงตามตัวอย่าง จะไม่ให้ข้อมูลเวลา ที่การติดตามระบบให้
ค้นหาการคำนวณที่ซ้ำกัน การติดตามจะแสดงให้เห็นว่ามีการคำนวณบางอย่าง ซ้ำหรือไม่ ซึ่งอาจบ่งบอกถึงการดำเนินการที่ไม่จำเป็น
วิเคราะห์ปัญหาการแย่งชิงล็อก ข้อมูลเกี่ยวกับสถานะของเธรด และสไลซ์ที่แสดงเมื่อมีการบล็อกทรัพยากรจะช่วยให้คุณระบุได้ว่าล็อก (เช่น บล็อก
synchronized
) ทำให้เกิดความล่าช้าในเส้นทางของผู้ใช้หรือไม่ทําความเข้าใจการทำงานแบบหลายเธรดในแอป Trace จะแสดงมุมมองของหลายเธรด โดยแสดงสถานะของแต่ละเธรดและ Trace Slice ที่ระบบหรือแอปของคุณเพิ่ม มุมมองแบบหลายเธรดนี้ช่วยให้คุณเข้าใจว่าเธรดใดที่ใช้งานอยู่ เธรดใดที่ไม่ได้ใช้งาน หรือเธรดใดที่กำลังทำงานอยู่และมีการโต้ตอบกันอย่างไร
ทำการวิเคราะห์ประสิทธิภาพที่ซับซ้อน อินเทอร์เฟซผู้ใช้ที่มีประสิทธิภาพและความสามารถในการแสดงข้อมูลประเภทต่างๆ ทำให้การติดตามระบบมีประโยชน์ในการแก้ไขข้อบกพร่องของปัญหาด้านประสิทธิภาพที่หลากหลาย ซึ่งรวมถึงเวลาในการตอบสนอง หน่วยความจำ และการใช้งานแบตเตอรี่
การติดตามระบบยังรองรับการค้นหาโดยใช้ PerfettoSQL ด้วย ฟีเจอร์ที่มีประสิทธิภาพนี้ช่วยให้คุณทำสิ่งต่อไปนี้ได้
- ดึงข้อมูลที่เฉพาะเจาะจง
- เปลี่ยนข้อมูลการติดตามเป็นเมตริกที่กำหนดเอง
- สร้างแทร็กการแก้ไขข้อบกพร่องจากคําค้นหาเพื่อให้เห็นภาพสิ่งที่คุณสนใจมากที่สุดใน UI ของ Perfetto ได้ง่ายขึ้น
- ทำการวิเคราะห์ที่ซับซ้อนได้โดยตรงภายใน UI ของ Perfetto
โปรไฟล์ตัวอย่างสแต็ก

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

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

โปรไฟล์ฮีปมีทั้งเวอร์ชันเนทีฟและ Java และเหมาะอย่างยิ่งสำหรับ การแก้ไขข้อบกพร่องเกี่ยวกับปัญหาหน่วยความจำ ซึ่งคล้ายกับตัวอย่างสแต็กการเรียก แต่จะสุ่มตัวอย่างเมื่อมีการจัดสรรหน่วยความจำแทนที่จะวัดรอบ CPU
เราขอแนะนำให้ใช้โปรไฟล์ฮีปเพื่อทำสิ่งต่อไปนี้
- ลดการเสียหน่วยความจำ โปรไฟล์ฮีปจะให้ตัวอย่างที่มีตำแหน่งโค้ด สำหรับการจัดสรรหน่วยความจำ ซึ่งจะช่วยให้คุณระบุส่วนที่สร้างออบเจ็กต์ชั่วคราวจำนวนมาก ซึ่งอาจทำให้เกิดการเก็บขยะ (GC) ในแอปบ่อยครั้ง
- ตรวจหาหน่วยความจำรั่วไหล โปรไฟล์ฮีปสามารถใช้ร่วมกับโปรไฟล์หน่วยความจำอื่นๆ เพื่อวินิจฉัยและแก้ไขหน่วยความจำรั่วไหล ซึ่งจะช่วยให้คุณระบุตำแหน่งที่จัดสรรหน่วยความจำมากกว่าที่คาดไว้มาก
รวมโปรไฟล์
โดยส่วนใหญ่แล้ว คุณจะวิเคราะห์ประสิทธิภาพโดยใช้โปรไฟล์เดียว อย่างไรก็ตาม การรวบรวมโปรไฟล์หลายรายการหรือโปรไฟล์รวมรายการเดียวมักจะให้ภาพที่สมบูรณ์ยิ่งขึ้นและช่วยวินิจฉัยปัญหาที่ซับซ้อนซึ่งโปรไฟล์เดียวไม่สามารถทำได้
ลองพิจารณาสถานการณ์ต่อไปนี้ที่การรวมโปรไฟล์จะเป็นประโยชน์
สถานการณ์ที่ 1: การตรวจสอบโค้ดที่ไม่ได้ใช้เครื่องมือ การติดตามระบบอาจแสดงเวลาในการตอบสนอง สำหรับการดำเนินการที่คุณได้ติดตั้งเครื่องมือไว้แล้ว อย่างไรก็ตาม คุณอาจต้องมี ข้อมูลเพิ่มเติมเกี่ยวกับส่วนที่ไม่ได้วัดผลของโค้ดที่ทํางานในช่วงเวลาดังกล่าว หากต้องการตรวจสอบ ให้ใช้โปรไฟล์สแต็กการเรียกเพื่อทำความเข้าใจ โค้ดที่ดำเนินการ จากนั้นข้อมูลนี้จะช่วยให้คุณปรับปรุงการติดตามได้โดย เพิ่ม Slice การติดตาม
สถานการณ์ที่ 2: การวิเคราะห์หน่วยความจำรั่วและการเก็บขยะ ลองนึกภาพ การติดตามระบบที่แสดงการเพิ่มขึ้นอย่างต่อเนื่องของหน่วยความจำฮีป Java เนื่องจากการ จัดสรร ซึ่งทำให้เกิดการเก็บขยะ (GC) บ่อยครั้ง หากต้องการทำความเข้าใจออบเจ็กต์ที่จัดสรร ให้ใช้โปรไฟล์ฮีปหรือฮีปดัมพ์ แนวทาง ร่วมนี้ช่วยให้คุณระบุวิธีลดการใช้หน่วยความจำได้ เช่น การลดการจัดสรรที่สิ้นเปลืองหรือเพิ่มประสิทธิภาพได้โดยใช้แคชอาจป้องกันไม่ให้เกิด GC