การใช้งานหน่วยความจำ (RSS แบบไม่ระบุตัวตน + Swap)

การใช้งานหน่วยความจำ (RSS แบบไม่ระบุตัวตน + Swap) เป็นเมตริกใน Android Vitals ที่แสดง การใช้งานหน่วยความจำของแอป

หน่วยความจำแบบไม่ระบุตัวตนคือหน่วยความจำที่ไม่ได้สำรองข้อมูลไว้ในไฟล์ในพื้นที่เก็บข้อมูล เช่น การจัดสรรฮีปและหน่วยความจำที่จัดสรร mmap ขนาดชุดที่อยู่ในหน่วยความจำ (RSS) คือ จำนวนหน้าหน่วยความจำทั้งหมด (ทั้งที่แชร์และไม่ได้แชร์) ที่ใช้โดยกระบวนการซึ่ง จัดเก็บไว้ใน RAM จริง สำหรับหน่วยความจำที่ไม่ระบุชื่อ ระบบจะเขียนหน้าไปยังพื้นที่ Swap (หรือ zRAM ใน Android) ได้เมื่อหน่วยความจำทำงานหนัก

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

ระบุการใช้งานหน่วยความจำสูง

Android Vitals

Android Vitals จะแชร์การใช้งานหน่วยความจำของแอปโดยแบ่งตามสถานะของกระบวนการต่อไปนี้

  • เบื้องหน้า: กระบวนการของแอปจะปรากฏให้เห็น P99 สูงในที่นี้มักส่งผลต่อ ประสิทธิภาพที่ผู้ใช้รับรู้ (การกระตุกหรือข้อขัดข้องเนื่องจาก OOM) และมีสาเหตุหลักมาจากการ เก็บคอมโพเนนต์ UI หรือกิจกรรมที่ไม่จำเป็นอีกต่อไป
  • บริการที่ผู้ใช้รับรู้: กระบวนการของแอปกำลังทำงานในสถานะที่รับรู้ได้ ซึ่งรวมถึงบริการที่ทำงานอยู่เบื้องหน้า งานที่เร่งด่วน และงานโอนข้อมูลที่เริ่มต้นโดยผู้ใช้ รวมถึงบริการที่ผูกกับระบบหรือบริการที่ผูกกับแอปอื่นๆ ด้วย เนื่องจากบริการเหล่านี้ ออกแบบมาสำหรับงานที่ใช้เวลานาน การเก็บหน่วยความจำไว้เนื่องจากหน่วยความจำรั่วหรือ การไม่ปล่อยทรัพยากรอาจทำให้ค่าเปอร์เซ็นไทล์ที่ 99 เพิ่มขึ้นเมื่อเวลาผ่านไป
  • เบื้องหลัง: แอปกำลังเรียกใช้บริการที่ทำงานอยู่เบื้องหลัง หรือเพิ่งเข้าสู่เบื้องหลังเมื่อเร็วๆ นี้ แต่ยังไม่ได้แคช ซึ่งเป็นจุดที่การประมวลผลในเบื้องหลังรั่วไหล และทรัพยากรที่ยังไม่ได้เผยแพร่สามารถเพิ่มขึ้นได้ เนื่องจากสถานะกระบวนการนี้มีความสำคัญน้อยกว่ากระบวนการที่ทำงานอยู่เบื้องหน้าหรือกระบวนการที่รับรู้ได้ คุณจึงควรหลีกเลี่ยงการเก็บหน่วยความจำจำนวนมากในสถานะนี้
  • แคช: แอปอยู่ในสถานะแคช สถานะนี้มีความไวสูงต่อ แรงกดดันด้านหน่วยความจำของระบบ เช่น LMK เนื่องจากระบบปฏิบัติการสามารถนำสถานะของกระบวนการนี้ออกได้ทุกเมื่อ เราจึงระบุสถานะนี้ไว้เพื่อวัตถุประสงค์ในการแก้ไขข้อบกพร่องเท่านั้น

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

Android Vitals ยังแบ่งการใช้งานหน่วยความจำของแอปตาม Bucket ของ RAM ด้วย เมตริกการใช้งานหน่วยความจำจะแสดงเป็นไทม์ไลน์ของค่าเปอร์เซ็นไทล์รายวัน พร้อมกับค่ารายวันล่าสุดสำหรับเปอร์เซ็นไทล์ที่ 50 และ 90

ระบุหน่วยความจำรั่วโดยใช้ความเบ้ของส่วนท้าย

หากต้องการช่วยระบุหน่วยความจำรั่ว ให้มองหาความแตกต่างระหว่างผู้ใช้ทั่วไป (P50) และผู้ใช้ส่วนท้าย (P90) ใน Android Vitals แม้ว่าการเพิ่มขนาดของชิ้นงานทั่วไปจะทำให้หน่วยความจำเพิ่มขึ้นอย่างสม่ำเสมอในเปอร์เซ็นไทล์ทั้งหมด แต่หน่วยความจำรั่วจะเพิ่มขึ้นเมื่อเวลาผ่านไป ซึ่งทำให้ข้อมูลส่วนท้ายเบ้ไปมาก

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