ประเภทโปรไฟล์และเวลาที่แต่ละประเภทมีประโยชน์

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

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

การติดตามระบบ

ตัวอย่างการติดตามระบบ
รูปที่ 1 ตัวอย่างการติดตามระบบ

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

จากมุมมองของแอป ลักษณะของข้อมูลในการติดตามอาจครอบคลุมหลายด้าน เช่น เวลาในการตอบสนอง, Jank, หน่วยความจำ, แบตเตอรี่ และอื่นๆ

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

  • Trace Slice: แสดงเวลาที่ผ่านไประหว่างจุดต่างๆ ในโค้ด คุณสามารถเพิ่มได้ด้วย Trace.beginSection และ Trace.endSection APIs.
  • Trace Counter: ค่าตัวเลขที่แสดงเมตริก เช่น ขนาดฮีป คุณสามารถเพิ่ม Trace Counter ได้ด้วย API Trace.setCounter

การติดตามระบบยังมีเมตริกที่สร้างขึ้นจากการค้นหา PerfettoSQL และใช้เพื่อทำการวิเคราะห์หรือเปรียบเทียบการติดตามได้

เราขอแนะนำให้ใช้การติดตามระบบเพื่อทำงานต่อไปนี้

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

  • ค้นหาการคำนวณที่ซ้ำกัน การติดตามสามารถแสดงให้เห็นว่ามีการคำนวณบางอย่างซ้ำหรือไม่ ซึ่งอาจบ่งบอกถึงการดำเนินการที่ไม่จำเป็น

  • วิเคราะห์ปัญหาการแย่งชิงล็อก ข้อมูลเกี่ยวกับสถานะเธรดและ Slice ที่แสดงเมื่อทรัพยากรถูกบล็อกจะช่วยให้คุณระบุได้ว่าล็อก (เช่น บล็อก synchronized) ทำให้เกิดความล่าช้าในเส้นทางของผู้ใช้หรือไม่

  • ทำความเข้าใจการทำงานแบบมัลติเธรดในแอป การติดตามจะแสดงมุมมองของหลายเธรด โดยแสดงสถานะของแต่ละเธรดและ Trace Slice ที่ระบบหรือแอปของคุณเพิ่ม มุมมองแบบมัลติเธรดนี้จะช่วยให้คุณเข้าใจว่าเธรดใดทำงานอยู่ หยุดทำงาน หรือกำลังทำงานอะไรอยู่ รวมถึงวิธีที่เธรดโต้ตอบกัน

  • ทำการวิเคราะห์ประสิทธิภาพที่ซับซ้อน อินเทอร์เฟซผู้ใช้ที่มีประสิทธิภาพและความสามารถในการแสดงข้อมูลประเภทต่างๆ ทำให้การติดตามระบบมีประโยชน์สำหรับการแก้ไขข้อบกพร่องด้านประสิทธิภาพที่หลากหลาย รวมถึงเวลาในการตอบสนอง หน่วยความจำ และการใช้แบตเตอรี่

การติดตามระบบยังรองรับการค้นหาโดยใช้ PerfettoSQL ด้วย ฟีเจอร์ที่มีประสิทธิภาพนี้ช่วยให้คุณทำสิ่งต่อไปนี้ได้

  • ดึงข้อมูลที่เฉพาะเจาะจง
  • เปลี่ยนข้อมูลการติดตามเป็นเมตริกที่กำหนดเอง
  • สร้างแทร็กการแก้ไขข้อบกพร่องจากการค้นหาเพื่อให้เห็นภาพสิ่งที่คุณสนใจมากที่สุดใน UI ของ Perfetto ได้ง่ายขึ้น
  • ทำการวิเคราะห์ที่ซับซ้อนได้โดยตรงภายใน UI ของ Perfetto

โปรไฟล์ตัวอย่างสแต็ก

ตัวอย่างโปรไฟล์
ตัวอย่างสแต็ก
รูปที่ 2 ตัวอย่างโปรไฟล์ตัวอย่างสแต็ก

โปรไฟล์ตัวอย่างสแต็กทำงานโดยการบันทึกตัวอย่างการดำเนินการโค้ดและจัดเก็บข้อมูลสแต็กการเรียกใช้ในอัตราที่กำหนดขณะที่เทรดกำลังทำงานบน CPU ซึ่งจะให้ข้อมูลเชิงลึกเกี่ยวกับสิ่งที่โค้ดกำลังทำอยู่ระหว่างการดำเนินการ

เราขอแนะนำให้ใช้ตัวอย่างสแต็กเพื่อทำสิ่งต่อไปนี้

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

ฮีปดัมป์

ตัวอย่างฮีปดัมป์
รูปที่ 3 ตัวอย่างฮีปดัมป์

ฮีปดัมป์ของ Java จะแสดงสแนปชอตของหน่วยความจำฮีปของ Java ในแอป สแนปชอตนี้รวมออบเจ็กต์ทั้งหมดและวิธีที่ออบเจ็กต์อ้างอิงถึงกัน ณ เวลาที่สร้างดัมป์

เราขอแนะนำให้รวบรวมฮีปดัมป์เพื่อทำสิ่งต่อไปนี้

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

โปรไฟล์ฮีป

ตัวอย่างโปรไฟล์ฮีป
รูปที่ 4 ตัวอย่างโปรไฟล์ฮีป

โปรไฟล์ฮีปมีทั้งเวอร์ชันเนทีฟและ Java และเหมาะอย่างยิ่งสำหรับการแก้ไขข้อบกพร่องด้านหน่วยความจำ โปรไฟล์ฮีปคล้ายกับตัวอย่างสแต็กการเรียกใช้ แต่จะสุ่มตัวอย่างเมื่อมีการจัดสรรหน่วยความจำแทนที่จะวัดรอบ CPU

เราขอแนะนำให้ใช้โปรไฟล์ฮีปเพื่อทำสิ่งต่อไปนี้

  • ลดการเปลี่ยนแปลงหน่วยความจำ โปรไฟล์ฮีปจะให้ตัวอย่างที่มีตำแหน่งโค้ดสำหรับการจัดสรรหน่วยความจำ ซึ่งจะช่วยคุณระบุพื้นที่ที่สร้างออบเจ็กต์ชั่วคราวจำนวนมาก ซึ่งอาจทำให้เกิดการเก็บกวาดหน่วยความจำ (GC) บ่อยครั้งในแอป
  • ค้นพบหน่วยความจำรั่ว คุณสามารถใช้โปรไฟล์ฮีปร่วมกับโปรไฟล์หน่วยความจำอื่นๆ เพื่อวิเคราะห์และแก้ไขหน่วยความจำรั่วได้ โปรไฟล์ฮีปจะช่วยคุณระบุตำแหน่งที่จัดสรรหน่วยความจำมากกว่าที่คาดไว้มาก

รวมโปรไฟล์

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

พิจารณาสถานการณ์ต่อไปนี้ที่การรวมโปรไฟล์เป็นประโยชน์

  • สถานการณ์ที่ 1: การตรวจสอบโค้ดที่ไม่ได้ใช้เครื่องมือ การติดตามระบบอาจแสดงเวลาในการตอบสนองสำหรับการดำเนินการที่คุณใช้เครื่องมือไปแล้ว อย่างไรก็ตาม คุณอาจต้องการข้อมูลเพิ่มเติมเกี่ยวกับส่วนของโค้ดที่ไม่ได้ใช้เครื่องมือซึ่งทำงานในช่วงเวลาดังกล่าว หากต้องการตรวจสอบ ให้ใช้โปรไฟล์สแต็กการเรียกใช้เพื่อทำความเข้าใจโค้ดที่ดำเนินการ จากนั้นข้อมูลนี้จะช่วยคุณปรับปรุงการติดตามโดยการเพิ่ม Trace Slice

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