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

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

หน่วยความจำแบบไม่ระบุตัวตนคือหน่วยความจำที่ไม่ได้สำรองข้อมูลไว้ในไฟล์ในพื้นที่เก็บข้อมูล เช่น การจัดสรรฮีปและหน่วยความจำที่จัดสรร mmap ซึ่งจะบันทึกการจัดสรรหน่วยความจำแบบไดนามิกของแอป รวมถึงฮีป Java หรือ Kotlin, การจัดสรรฮีปแบบเนทีฟที่ไม่มีการจัดการ (ที่ซึ่งข้อมูลพิกเซลของ Bitmap อยู่ใน Android 8.0 (ระดับ API 26) ขึ้นไป) และสแต็กการดำเนินการของเธรด แม้ว่าระบบปฏิบัติการจะทิ้งหน่วยความจำที่สำรองข้อมูลไว้ในไฟล์ได้ เมื่อมีแรงกดดัน แต่ก็ทิ้งหน่วยความจำที่ไม่ระบุชื่อไม่ได้

Resident Set Size (RSS) คือจำนวนหน้าหน่วยความจำทั้งหมด (ทั้งที่ใช้ร่วมกันและไม่ได้ใช้ร่วมกัน) ที่กระบวนการใช้ซึ่งอยู่ใน RAM จริง ระบบจะถือว่าหน้าเว็บ "แชร์" หากมีกระบวนการมากกว่า 1 รายการเข้าถึงหน้าเว็บนั้น (เช่น แอปที่เข้าถึงไลบรารีเดียวกัน)

สำหรับหน่วยความจำที่ไม่ระบุชื่อ ระบบจะเขียนหน้าไปยังพื้นที่ Swap (หรือ zRAM ใน Android) ได้เมื่อหน่วยความจำทำงานหนัก ระบบสามารถอ่านหน้าเหล่านี้จากพื้นที่สวอปได้หากจำเป็น

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

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

แหล่งข้อมูล

วินิจฉัยการใช้งานหน่วยความจำมากเกินไปในเครื่อง

หากต้องการเริ่มวินิจฉัยแหล่งที่มาของการใช้หน่วยความจำมากเกินไป คุณสามารถ บันทึก Heap Dump ด้วยบันทึก Heap Dump ในการตั้งค่าสำหรับนักพัฒนาแอป, Android Studio หรือ Perfetto เราขอแนะนำให้คุณเริ่มด้วยการบันทึก ฮีปดัมพ์ในเครื่องหลังจากทดสอบเส้นทางของผู้ใช้หลักของแอป

เราขอแนะนำให้ทดสอบเส้นทางของผู้ใช้ต่อไปนี้เป็นพิเศษ

  • WebView และเซสชันเบราว์เซอร์ในแอป
  • การเลื่อนได้ไม่รู้จบที่มีสื่อจำนวนมาก
  • ขั้นตอนการสร้างและแก้ไขชิ้นงาน

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

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

หลังจากที่คุณรวบรวมฮีปดัมป์แล้ว เราขอแนะนำให้ใช้ทักษะ Android Profiler เพื่อวิเคราะห์ฮีปดัมป์และระบุแหล่งที่มาที่อาจทำให้มีการใช้งานหน่วยความจำสูง

ตัวอย่างคำตอบที่ทักษะ AI อาจตอบมีดังนี้

I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
  Summary of Findings
  The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
   1. [Library] Image Cache Optimization:
       * Review the [Library] caching strategy. Ensure that bitmaps
         loaded for animations are released or downsampled when the animation is
         not in the foreground.
   2. Asset Resolution Audit:
       * The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
   3. View Lifecycle Management:
       * Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
      tab are properly detached or their animations are cleared when switching between tabs.
   4. Fix Surface Leaks:
       * Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
         native resource exhaustion.

แหล่งข้อมูลเพิ่มเติมสำหรับการตีความ Heap Dump

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

  • การวิเคราะห์ด้วยตนเอง: ใช้คำแนะนำเกี่ยวกับ Perfetto Heap Dump Explorer เพื่อดูวิธีไปยังส่วนต่างๆ และตีความภาพการแสดงฮีปดัมป์ใน UI ของ Perfetto
  • การจัดสรร Java/Kotlin: อ่านการแสดงภาพฮีปดัมป์ ART แรกเพื่อดูคำแนะนำแบบทีละขั้นตอนในการวิเคราะห์ฮีปดัมป์ของ Android Runtime (ART)
  • การจัดสรรเนทีฟ: โปรดอ่านเอกสารประกอบการสร้างโปรไฟล์เนทีฟของ Perfetto เพื่อดูวิธีรวบรวมและวิเคราะห์โปรไฟล์หน่วยความจำเนทีฟ (C/C++)
  • การตรวจสอบ CLI: ใช้ adb dumpsys meminfo เพื่อดูรายละเอียดการใช้งานหน่วยความจำของแอปในอุปกรณ์อย่างรวดเร็ว

ปรับปรุงการใช้งานหน่วยความจำ

ดูข้อมูลเพิ่มเติมเกี่ยวกับการปรับปรุงการใช้งานหน่วยความจำของแอปได้ในส่วนต่อไปนี้

โปรดดูคำแนะนำโดยละเอียดเกี่ยวกับการแก้ไขปัญหาหน่วยความจำในคู่มือจัดการหน่วยความจำของแอป