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

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

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

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

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