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