dumpsys เป็นเครื่องมือที่ทำงานบนอุปกรณ์ Android และให้ข้อมูลเกี่ยวกับบริการของระบบ เรียก dumpsys จากบรรทัดคำสั่งโดยใช้ Android Debug Bridge (ADB) เพื่อรับเอาต์พุตการวินิจฉัยสำหรับบริการระบบทั้งหมดที่ทำงานในอุปกรณ์ที่เชื่อมต่อ
โดยปกติเอาต์พุตนี้จะแสดงรายละเอียดมากกว่าที่คุณต้องการ ดังนั้นให้ใช้ตัวเลือกบรรทัดคำสั่งในหน้านี้เพื่อรับเอาต์พุตสำหรับบริการของระบบที่ต้องการเท่านั้น หน้านี้ยังอธิบายวิธีใช้ dumpsys เพื่อทำงานทั่วไป เช่น การตรวจสอบอินพุต, RAM, แบตเตอรี่ หรือการวินิจฉัยเครือข่าย
วากยสัมพันธ์
ไวยากรณ์ทั่วไปสำหรับการใช้ dumpsys มีดังนี้
adb shell dumpsys [-t timeout] [--help | -l | --skip services | service [arguments] | -c | -h]
หากต้องการดูผลลัพธ์การวินิจฉัยสำหรับบริการทั้งหมดของระบบในอุปกรณ์ที่เชื่อมต่อ ให้เรียกใช้ adb shell dumpsys
อย่างไรก็ตาม การดำเนินการนี้จะแสดงผลข้อมูลมากกว่าที่คุณมักจะต้องการ หากต้องการให้เอาต์พุตจัดการได้ง่ายขึ้น ให้ระบุบริการที่ต้องการตรวจสอบโดยใส่ไว้ในคําสั่ง ตัวอย่างเช่น คำสั่งด้านล่างแสดงข้อมูลระบบสำหรับคอมโพเนนต์อินพุต เช่น หน้าจอสัมผัสหรือแป้นพิมพ์ในตัว
adb shell dumpsys input
ดูรายการบริการของระบบทั้งหมดที่คุณใช้กับ dumpsys ได้โดยใช้คำสั่งต่อไปนี้
adb shell dumpsys -l
ตัวเลือกบรรทัดคำสั่ง
ตารางต่อไปนี้แสดงตัวเลือกที่ใช้ได้เมื่อใช้ dumpsys
ตารางที่ 1 รายการตัวเลือกที่ใช้ได้สำหรับ dumpsys
| ตัวเลือก | คำอธิบาย | 
|---|---|
| -t timeout | ระบุระยะเวลาหมดเวลาเป็นวินาที หากไม่ได้ระบุ ค่าเริ่มต้นจะเป็น 10 วินาที | 
| --help | พิมพ์ข้อความความช่วยเหลือสำหรับเครื่องมือ dumpsys | 
| -l | แสดงรายการบริการของระบบทั้งหมดที่คุณใช้กับ dumpsysได้ | 
| --skip services | ระบุ services ที่ไม่ต้องการให้รวมไว้ในเอาต์พุต | 
| service [arguments] | ระบุ service ที่ต้องการแสดงผล บริการบางอย่างอาจอนุญาตให้คุณส่ง arguments ที่ไม่บังคับ หากต้องการดูข้อมูลเกี่ยวกับอาร์กิวเมนต์ที่ไม่บังคับเหล่านี้ ให้ส่งตัวเลือก -hพร้อมบริการ
adb shell dumpsys procstats -h
     | 
| -c | เมื่อระบุบริการบางอย่าง ให้ใส่ตัวเลือกนี้ต่อท้ายเพื่อแสดงผลข้อมูลในรูปแบบที่เครื่องอ่านได้ | 
| -h | สำหรับบริการบางอย่าง ให้ใส่ตัวเลือกนี้ต่อท้ายเพื่อดูข้อความช่วยเหลือและตัวเลือกเพิ่มเติมสำหรับบริการนั้น | 
ตรวจสอบการวินิจฉัยอินพุต
การระบุบริการ input ตามที่แสดงในคําสั่งต่อไปนี้จะแสดงสถานะของอุปกรณ์อินพุตของระบบ เช่น แป้นพิมพ์และหน้าจอสัมผัส และการประมวลผลเหตุการณ์อินพุต
adb shell dumpsys input
เอาต์พุตจะแตกต่างกันไปตามเวอร์ชัน Android ที่ทำงานในอุปกรณ์ที่เชื่อมต่อ ส่วนต่อไปนี้จะอธิบายประเภทข้อมูลที่คุณมักจะเห็น
สถานะฮับเหตุการณ์
ต่อไปนี้คือตัวอย่างสิ่งที่คุณอาจเห็นเมื่อตรวจสอบสถานะ Event Hub ของการวินิจฉัยอินพุต
INPUT MANAGER (dumpsys input)
Event Hub State:
  BuiltInKeyboardId: -2
  Devices:
    -1: Virtual
      Classes: 0x40000023
      Path: 
      Descriptor: a718a782d34bc767f4689c232d64d527998ea7fd
      Location:
      ControllerNumber: 0
      UniqueId: 
      Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile: /system/usr/keylayout/Generic.kl
      KeyCharacterMapFile: /system/usr/keychars/Virtual.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
    1: msm8974-taiko-mtp-snd-card Headset Jack
      Classes: 0x00000080
      Path: /dev/input/event5
      Descriptor: c8e3782483b4837ead6602e20483c46ff801112c
      Location: ALSA
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile:
      KeyCharacterMapFile:
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
    2: msm8974-taiko-mtp-snd-card Button Jack
      Classes: 0x00000001
      Path: /dev/input/event4
      Descriptor: 96fe62b244c555351ec576b282232e787fb42bab
      Location: ALSA
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile: /system/usr/keylayout/msm8974-taiko-mtp-snd-card_Button_Jack.kl
      KeyCharacterMapFile: /system/usr/keychars/msm8974-taiko-mtp-snd-card_Button_Jack.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
    3: hs_detect
      Classes: 0x00000081
      Path: /dev/input/event3
      Descriptor: 485d69228e24f5e46da1598745890b214130dbc4
      Location:
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0000, vendor=0x0001, product=0x0001, version=0x0001
      KeyLayoutFile: /system/usr/keylayout/hs_detect.kl
      KeyCharacterMapFile: /system/usr/keychars/hs_detect.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
...
  สถานะเครื่องมืออ่านอินพุต
InputReader มีหน้าที่ถอดรหัสเหตุการณ์อินพุตจากเคอร์เนล ข้อมูลการถ่ายโอนสถานะจะแสดงข้อมูลเกี่ยวกับการกำหนดค่าอุปกรณ์อินพุตแต่ละรายการและการเปลี่ยนแปลงสถานะล่าสุดที่เกิดขึ้น เช่น การกดแป้นพิมพ์หรือการสัมผัสบนหน้าจอสัมผัส
ตัวอย่างต่อไปนี้แสดงเอาต์พุตสำหรับหน้าจอสัมผัส จดข้อมูลเกี่ยวกับความละเอียดของอุปกรณ์และพารามิเตอร์การปรับเทียบที่ใช้
Input Reader State
...
  Device 6: Melfas MMSxxx Touchscreen
      IsExternal: false
      Sources: 0x00001002
      KeyboardType: 0
      Motion Ranges:
        X: source=0x00001002, min=0.000, max=719.001, flat=0.000, fuzz=0.999
        Y: source=0x00001002, min=0.000, max=1279.001, flat=0.000, fuzz=0.999
        PRESSURE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
        SIZE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
        TOUCH_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
        TOUCH_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
        TOOL_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
        TOOL_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
      Touch Input Mapper:
        Parameters:
          GestureMode: spots
          DeviceType: touchScreen
          AssociatedDisplay: id=0, isExternal=false
          OrientationAware: true
        Raw Touch Axes:
          X: min=0, max=720, flat=0, fuzz=0, resolution=0
          Y: min=0, max=1280, flat=0, fuzz=0, resolution=0
          Pressure: min=0, max=255, flat=0, fuzz=0, resolution=0
          TouchMajor: min=0, max=30, flat=0, fuzz=0, resolution=0
          TouchMinor: unknown range
          ToolMajor: unknown range
          ToolMinor: unknown range
          Orientation: unknown range
          Distance: unknown range
          TiltX: unknown range
          TiltY: unknown range
          TrackingId: min=0, max=65535, flat=0, fuzz=0, resolution=0
          Slot: min=0, max=9, flat=0, fuzz=0, resolution=0
        Calibration:
          touch.size.calibration: diameter
          touch.size.scale: 10.000
          touch.size.bias: 0.000
          touch.size.isSummed: false
          touch.pressure.calibration: amplitude
          touch.pressure.scale: 0.005
          touch.orientation.calibration: none
          touch.distance.calibration: none
        SurfaceWidth: 720px
        SurfaceHeight: 1280px
        SurfaceOrientation: 0
        Translation and Scaling Factors:
          XScale: 0.999
          YScale: 0.999
          XPrecision: 1.001
          YPrecision: 1.001
          GeometricScale: 0.999
          PressureScale: 0.005
          SizeScale: 0.033
          OrientationCenter: 0.000
          OrientationScale: 0.000
          DistanceScale: 0.000
          HaveTilt: false
          TiltXCenter: 0.000
          TiltXScale: 0.000
          TiltYCenter: 0.000
          TiltYScale: 0.000
        Last Button State: 0x00000000
        Last Raw Touch: pointerCount=0
        Last Cooked Touch: pointerCount=0
ในตอนท้ายของการถ่ายโอนข้อมูลสถานะเครื่องมืออ่านอินพุต จะมีข้อมูลบางอย่างเกี่ยวกับพารามิเตอร์การกําหนดค่าส่วนกลาง เช่น ช่วงเวลาการแตะ
Configuration:
  ExcludedDeviceNames: []
  VirtualKeyQuietTime: 0.0ms
  PointerVelocityControlParameters: scale=1.000, lowThreshold=500.000, highThreshold=3000.000, acceleration=3.000
  WheelVelocityControlParameters: scale=1.000, lowThreshold=15.000, highThreshold=50.000, acceleration=4.000
  PointerGesture:
    Enabled: true
    QuietInterval: 100.0ms
    DragMinSwitchSpeed: 50.0px/s
    TapInterval: 150.0ms
    TapDragInterval: 300.0ms
    TapSlop: 20.0px
    MultitouchSettleInterval: 100.0ms
    MultitouchMinDistance: 15.0px
    SwipeTransitionAngleCosine: 0.3
    SwipeMaxWidthRatio: 0.2
    MovementSpeedRatio: 0.8
    ZoomSpeedRatio: 0.3
สถานะตัวจัดเตรียมอินพุต
InputDispatcher มีหน้าที่ส่งเหตุการณ์การป้อนข้อมูลไปยังแอปพลิเคชัน
ดังที่แสดงในตัวอย่างเอาต์พุตต่อไปนี้ ข้อมูลการถ่ายโอนสถานะจะแสดงข้อมูลเกี่ยวกับหน้าต่างที่กําลังแตะ สถานะคิวอินพุต สถานะ ANR ที่กำลังดำเนินอยู่ และข้อมูลเหตุการณ์อินพุตอื่นๆ
Input Dispatcher State:
  DispatchEnabled: 1
  DispatchFrozen: 0
  FocusedApplication: <null>
  FocusedWindow: name='Window{3fb06dc3 u0 StatusBar}'
  TouchStates: <no displays touched>
  Windows:
    0: name='Window{357bbbfe u0 SearchPanel}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01820100, type=0x000007e8, layer=211000, frame=[0,0][1080,1920], scale=1.000000, touchableRegion=[0,0][1080,1920], inputFeatures=0x00000000, ownerPid=22674, ownerUid=10020, dispatchingTimeout=5000.000ms
    1: name='Window{3b14c0ca u0 NavigationBar}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01840068, type=0x000007e3, layer=201000, frame=[0,1776][1080,1920], scale=1.000000, touchableRegion=[0,1776][1080,1920], inputFeatures=0x00000000, ownerPid=22674, ownerUid=10020, dispatchingTimeout=5000.000ms
    2: name='Window{2c7e849c u0 com.vito.lux}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=true, canReceiveKeys=false, flags=0x0089031a, type=0x000007d6, layer=191000, frame=[-495,-147][1575,1923], scale=1.000000, touchableRegion=[-495,-147][1575,1923], inputFeatures=0x00000000, ownerPid=4697, ownerUid=10084, dispatchingTimeout=5000.000ms
    ...
  MonitoringChannels:
    0: 'WindowManager (server)'
  RecentQueue: length=10
    MotionEvent(deviceId=4, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (335.0, 1465.0)]), policyFlags=0x62000000, age=217264.0ms
    MotionEvent(deviceId=4, source=0x00001002, action=1, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (335.0, 1465.0)]), policyFlags=0x62000000, age=217255.7ms
    MotionEvent(deviceId=4, source=0x00001002, action=0, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (330.0, 1283.0)]), policyFlags=0x62000000, age=216805.0ms
    ...
  PendingEvent: <none>
  InboundQueue: <empty>
  ReplacedKeys: <empty>
  Connections:
    0: channelName='WindowManager (server)', windowName='monitor', status=NORMAL, monitor=true, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    1: channelName='278c1d65 KeyguardScrim (server)', windowName='Window{278c1d65 u0 KeyguardScrim}', status=NORMAL, monitor=false, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    2: channelName='357bbbfe SearchPanel (server)', windowName='Window{357bbbfe u0 SearchPanel}', status=NORMAL, monitor=false, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    ...
  AppSwitch: not pending
    7: channelName='2280455f com.google.android.gm/com.google.android.gm.ConversationListActivityGmail (server)', windowName='Window{2280455f u0 com.google.android.gm/com.google.android.gm.ConversationListActivityGmail}', status=NORMAL, monitor=false, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    8: channelName='1a7be08a com.android.systemui/com.android.systemui.recents.RecentsActivity (server)', windowName='Window{1a7be08a u0 com.android.systemui/com.android.systemui.recents.RecentsActivity EXITING}', status=NORMAL, monitor=false, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    9: channelName='3b14c0ca NavigationBar (server)', windowName='Window{3b14c0ca u0 NavigationBar}', status=NORMAL, monitor=false, inputPublisherBlocked=false
      OutboundQueue: <empty>
      WaitQueue: <empty>
    ...
  Configuration:
    KeyRepeatDelay: 50.0ms
    KeyRepeatTimeout: 500.0ms
สิ่งที่ควรตรวจสอบ
ต่อไปนี้คือรายการสิ่งที่ต้องพิจารณาเมื่อตรวจสอบเอาต์พุตสำหรับบริการ input
สถานะฮับเหตุการณ์:
- อุปกรณ์อินพุตทั้งหมดที่คุณต้องการมีให้ใช้งาน
- อุปกรณ์อินพุตแต่ละเครื่องจะมีไฟล์เลย์เอาต์แป้นพิมพ์ ไฟล์การแมปอักขระของแป้นพิมพ์ และไฟล์การกําหนดค่าอุปกรณ์อินพุตที่เหมาะสม หากไม่มีไฟล์หรือไฟล์มีข้อผิดพลาดทางไวยากรณ์ ระบบจะไม่โหลดไฟล์
-  อุปกรณ์อินพุตแต่ละเครื่องได้รับการจัดประเภทอย่างถูกต้อง บิตในช่อง Classesสอดคล้องกับ Flag ในEventHub.hเช่นINPUT_DEVICE_CLASS_TOUCH_MT
-  BuiltInKeyboardIdถูกต้อง หากอุปกรณ์ไม่มีแป้นพิมพ์ในตัว รหัสต้องเป็น-2ไม่เช่นนั้น รหัสควรเป็นรหัสของแป้นพิมพ์ในตัว
- หากพบว่า BuiltInKeyboardIdไม่ใช่-2ตามที่ควรจะเป็น แสดงว่าคุณไม่มีไฟล์การแมปอักขระแป้นพิมพ์สำหรับปุ่มกดฟังก์ชันพิเศษ อุปกรณ์ที่มีปุ่มกดฟังก์ชันพิเศษควรมีไฟล์การแมปอักขระของแป้นพิมพ์ที่มีเฉพาะบรรทัดtype SPECIAL_FUNCTION
สถานะเครื่องมืออ่านอินพุต:
- มีอุปกรณ์อินพุตที่คาดไว้ทั้งหมด
- อุปกรณ์อินพุตแต่ละเครื่องได้รับการกําหนดค่าอย่างถูกต้อง โดยเฉพาะอย่างยิ่ง ให้ตรวจสอบว่าหน้าจอสัมผัสและแกนจอยสติ๊กทำงานได้อย่างถูกต้อง
สถานะตัวจัดเตรียมอินพุต:
- เหตุการณ์อินพุตทั้งหมดได้รับการประมวลผลตามที่คาดไว้
- หลังจากแตะหน้าจอสัมผัสและเรียกใช้ dumpsysพร้อมกัน บรรทัดTouchStatesจะระบุหน้าต่างที่คุณแตะได้อย่างถูกต้อง
ทดสอบประสิทธิภาพ UI
การระบุบริการ gfxinfo จะแสดงผลลัพธ์พร้อมข้อมูลประสิทธิภาพที่เกี่ยวข้องกับเฟรมของภาพเคลื่อนไหวที่เกิดขึ้นระหว่างขั้นตอนการบันทึก
คำสั่งต่อไปนี้ใช้ gfxinfo เพื่อรวบรวมข้อมูลประสิทธิภาพ UI สำหรับชื่อแพ็กเกจที่ระบุ
adb shell dumpsys gfxinfo package-name
นอกจากนี้ คุณยังใส่ตัวเลือก framestats เพื่อระบุข้อมูลการจับเวลาเฟรมที่ละเอียดยิ่งขึ้นจากเฟรมล่าสุดได้ด้วย เพื่อให้คุณติดตามและแก้ไขข้อผิดพลาดได้แม่นยำยิ่งขึ้น
adb shell dumpsys gfxinfo package-name framestats
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ gfxinfo และ framestats เพื่อผสานรวมการวัดประสิทธิภาพ UI เข้ากับแนวทางปฏิบัติการทดสอบได้ที่การเขียนการทดสอบประสิทธิภาพแบบมาโคร
ตรวจสอบการวินิจฉัยเครือข่าย
การระบุบริการ netstats จะแสดงสถิติการใช้งานเครือข่ายที่รวบรวมตั้งแต่อุปกรณ์เครื่องก่อนบูตขึ้น หากต้องการแสดงข้อมูลเพิ่มเติม เช่น ข้อมูลรหัสผู้ใช้ที่ไม่ซ้ำกัน (UID) โดยละเอียด ให้ใส่ตัวเลือก detail ดังนี้
adb shell dumpsys netstats detail
เอาต์พุตจะแตกต่างกันไปตามเวอร์ชัน Android ที่ทำงานในอุปกรณ์ที่เชื่อมต่อ ส่วนต่อไปนี้จะอธิบายประเภทข้อมูลที่คุณมักจะเห็น
อินเทอร์เฟซที่ใช้งานอยู่และอินเทอร์เฟซ UID ที่ใช้งานอยู่
ตัวอย่างเอาต์พุตต่อไปนี้แสดงอินเทอร์เฟซที่ใช้งานอยู่และอินเทอร์เฟซ UID ที่ใช้งานอยู่ของอุปกรณ์ที่เชื่อมต่อ ในกรณีส่วนใหญ่ ข้อมูลสำหรับอินเทอร์เฟซที่ใช้งานอยู่และอินเทอร์เฟซ UID ที่ใช้งานอยู่จะเหมือนกัน
Active interfaces:
  iface=wlan0 ident=[{type=WIFI, subType=COMBINED, networkId="Guest"}]
Active UID interfaces:
  iface=wlan0 ident=[{type=WIFI, subType=COMBINED, networkId="Guest"}]
สถิติ "Dev" และ "Xt"
ต่อไปนี้คือตัวอย่างเอาต์พุตสำหรับส่วนสถิติของนักพัฒนาแอป
Dev stats:
  Pending bytes: 1798112
  History since boot:
  ident=[{type=WIFI, subType=COMBINED, networkId="Guest", metered=false}] uid=-1 set=ALL tag=0x0
    NetworkStatsHistory: bucketDuration=3600
      st=1497891600 rb=1220280 rp=1573 tb=309870 tp=1271 op=0
      st=1497895200 rb=29733 rp=145 tb=85354 tp=185 op=0
      st=1497898800 rb=46784 rp=162 tb=42531 tp=192 op=0
      st=1497902400 rb=27570 rp=111 tb=35990 tp=121 op=0
Xt stats:
  Pending bytes: 1771782
  History since boot:
  ident=[{type=WIFI, subType=COMBINED, networkId="Guest", metered=false}] uid=-1 set=ALL tag=0x0
    NetworkStatsHistory: bucketDuration=3600
      st=1497891600 rb=1219598 rp=1557 tb=291628 tp=1255 op=0
      st=1497895200 rb=29623 rp=142 tb=82699 tp=182 op=0
      st=1497898800 rb=46684 rp=160 tb=39756 tp=191 op=0
      st=1497902400 rb=27528 rp=110 tb=34266 tp=120 op=0
สถิติ UID
ต่อไปนี้คือตัวอย่างสถิติโดยละเอียดของ UID แต่ละรายการ
UID stats:
  Pending bytes: 744
  Complete history:
  ident=[[type=MOBILE_SUPL, subType=COMBINED, subscriberId=311111...], [type=MOBILE, subType=COMBINED, subscriberId=311111...]] uid=10007  set=DEFAULT tag=0x0
    NetworkStatsHistory: bucketDuration=7200000
      bucketStart=1406167200000 activeTime=7200000 rxBytes=4666 rxPackets=7 txBytes=1597 txPackets=10 operations=0
  ident=[[type=WIFI, subType=COMBINED, networkId="MySSID"]] uid=10007  set=DEFAULT tag=0x0
    NetworkStatsHistory: bucketDuration=7200000
      bucketStart=1406138400000 activeTime=7200000 rxBytes=17086802 rxPackets=15387 txBytes=1214969 txPackets=8036 operations=28
      bucketStart=1406145600000 activeTime=7200000 rxBytes=2396424 rxPackets=2946 txBytes=464372 txPackets=2609 operations=70
      bucketStart=1406152800000 activeTime=7200000 rxBytes=200907 rxPackets=606 txBytes=187418 txPackets=739 operations=0
      bucketStart=1406160000000 activeTime=7200000 rxBytes=826017 rxPackets=1126 txBytes=267342 txPackets=1175 operations=35
หากต้องการค้นหา UID ของแอป ให้เรียกใช้คําสั่ง adb shell dumpsys
package your-package-name จากนั้นมองหาบรรทัดที่เขียนว่า userId
เช่น หากต้องการดูการใช้งานเครือข่ายสําหรับแอป "com.example.myapp" ให้เรียกใช้คําสั่งต่อไปนี้
adb shell dumpsys package com.example.myapp | grep userId
เอาต์พุตควรมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
    userId=10007 gids=[3003, 1028, 1015]
ใช้ตัวอย่างการดัมพ์ก่อนหน้านี้เพื่อค้นหาบรรทัดที่ uid=10007 เส้นดังกล่าวมี 2 เส้น เส้นแรกแสดงการเชื่อมต่อมือถือและเส้นที่ 2 แสดงการเชื่อมต่อ Wi-Fi ใต้แต่ละบรรทัด คุณจะเห็นข้อมูลต่อไปนี้สำหรับกรอบเวลา 2 ชั่วโมงแต่ละกรอบ ซึ่ง bucketDuration จะระบุเป็นมิลลิวินาที
-  set=DEFAULTหมายถึงการใช้งานเครือข่ายอยู่เบื้องหน้า ส่วนset=BACKGROUNDหมายถึงการใช้งานอยู่เบื้องหลังset=ALLหมายถึงทั้ง 2 อย่าง
-  tag=0x0ระบุแท็กซ็อกเก็ตที่เชื่อมโยงกับการเข้าชม
-  rxBytesและrxPacketsแสดงถึงจำนวนไบต์ที่ได้รับและแพ็กเก็ตที่ได้รับในช่วงเวลาที่เกี่ยวข้อง
-  txBytesและtxPacketsแสดงถึงไบต์ที่ส่ง (ส่ง) และแพ็กเก็ตที่ส่งในช่วงเวลาที่เกี่ยวข้อง
ตรวจสอบการวินิจฉัยแบตเตอรี่
การระบุบริการ batterystats จะสร้างข้อมูลสถิติเกี่ยวกับการใช้งานแบตเตอรี่ในอุปกรณ์ โดยจัดระเบียบตามรหัสผู้ใช้ที่ไม่ซ้ำกัน (UID) ดูวิธีใช้ dumpsys เพื่อทดสอบแอปสำหรับ Doze และสแตนด์บายแอปได้ที่การทดสอบด้วย Doze และสแตนด์บายแอป
คำสั่งสำหรับ batterystats มีดังนี้
adb shell dumpsys batterystats options
หากต้องการดูรายการตัวเลือกเพิ่มเติมที่ใช้ได้กับ batterystats ให้ใส่ตัวเลือก
-h ตัวอย่างต่อไปนี้แสดงสถิติการใช้งานแบตเตอรี่สำหรับแพ็กเกจแอปที่ระบุนับตั้งแต่ชาร์จอุปกรณ์ครั้งล่าสุด
adb shell dumpsys batterystats --charged package-name
โดยปกติแล้วเอาต์พุตจะมีข้อมูลต่อไปนี้
- ประวัติเหตุการณ์ที่เกี่ยวข้องกับแบตเตอรี่
- สถิติจากทั่วโลกของอุปกรณ์
- การใช้พลังงานโดยประมาณต่อ UID และคอมโพเนนต์ของระบบ
- มิลลิวินาทีต่อแพ็กเก็ตบนอุปกรณ์เคลื่อนที่ต่อแอป
- สถิติแบบรวมของ UID ของระบบ
- สถิติรวมของ UID แอป
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ batterystats และการสร้างภาพ HTML ของเอาต์พุต ซึ่งช่วยให้เข้าใจและวินิจฉัยปัญหาเกี่ยวกับแบตเตอรี่ได้ง่ายขึ้น โปรดอ่านสร้างโปรไฟล์การใช้งานแบตเตอรี่ด้วย Batterystats และ Battery Historian
ตรวจสอบเอาต์พุตที่เหมาะกับคอมพิวเตอร์
คุณสามารถสร้างเอาต์พุต batterystats ในรูปแบบ CSV ที่เครื่องอ่านได้โดยใช้คำสั่งต่อไปนี้
adb shell dumpsys batterystats --checkin
ต่อไปนี้เป็นตัวอย่างเอาต์พุต
9,0,i,vers,11,116,K,L 9,0,i,uid,1000,android 9,0,i,uid,1000,com.android.providers.settings 9,0,i,uid,1000,com.android.inputdevices 9,0,i,uid,1000,com.android.server.telecom ... 9,0,i,dsd,1820451,97,s-,p- 9,0,i,dsd,3517481,98,s-,p- 9,0,l,bt,0,8548446,1000983,8566645,1019182,1418672206045,8541652,994188 9,0,l,gn,0,0,666932,495312,0,0,2104,1444 9,0,l,m,6794,0,8548446,8548446,0,0,0,666932,495312,0,697728,0,0,0,5797,0,0 ...
การสังเกตการใช้งานแบตเตอรี่อาจเป็นระดับ UID หรือระดับระบบ ระบบจะเลือกข้อมูลที่จะรวมไว้โดยพิจารณาจากประโยชน์ในการวิเคราะห์ประสิทธิภาพแบตเตอรี่ แต่ละแถวแสดงการสังเกต โดยมีองค์ประกอบต่อไปนี้
- จํานวนเต็มตัวยึดตําแหน่ง
- รหัสผู้ใช้ที่เชื่อมโยงกับการสังเกตการณ์
- โหมดการรวมข้อมูล
  - iสำหรับข้อมูลที่ไม่ได้เชื่อมโยงกับสถานะชาร์จ/ไม่ได้ชาร์จ
- lสำหรับ- --charged(การใช้งานนับตั้งแต่ชาร์จครั้งล่าสุด)
- uสำหรับ- --unplugged(การใช้งานนับตั้งแต่ถอดปลั๊กครั้งล่าสุด) เลิกใช้งานใน Android 5.1.1
 
- ตัวระบุส่วน ซึ่งจะกำหนดวิธีตีความค่าต่อๆ ไปในบรรทัด
ตารางต่อไปนี้อธิบายตัวระบุส่วนต่างๆ ที่คุณอาจเห็น
ตารางที่ 2 รายการตัวระบุส่วน
| ตัวระบุส่วน | คำอธิบาย | ฟิลด์ที่เหลือ | 
|---|---|---|
| 
 | เวอร์ชัน | 
 | 
| 
 | UID | 
 | 
| 
 | APK | 
 | 
| 
 | กระบวนการ | 
 | 
| 
 | เซ็นเซอร์ | 
 | 
| 
 | ไวเบรเตอร์ | 
 | 
| 
 | เบื้องหน้า | 
 | 
| 
 | เวลาของรัฐ | 
 | 
| 
 | Wake Lock | 
 | 
| 
 | ซิงค์ | 
 | 
| 
 | งาน | 
 | 
| 
 | Wake Lock ของเคอร์เนล | 
 | 
| 
 | เหตุผลในการปลุก | 
 | 
| 
 | เครือข่าย | 
 | 
| 
 | กิจกรรมของผู้ใช้ | 
 | 
| 
 | แบตเตอรี่ | 
 | 
| 
 | การคายประจุแบตเตอรี่ | 
 | 
| 
 | ระดับแบตเตอรี่ | 
 | 
| 
 | Wi-Fi | 
 | 
| 
 | Global Wi-Fi | 
 | 
| 
 | บลูทูธทั่วโลก | 
 | 
| 
 | อื่นๆ | 
 | 
| 
 | เครือข่ายทั่วโลก | 
 | 
| 
 | ความสว่างหน้าจอ | 
 | 
| 
 | เวลาในการสแกนสัญญาณ | 
 | 
| 
 | ระยะเวลาที่สัญญาณแรง | 
 | 
| 
 | จำนวนความแรงสัญญาณ | 
 | 
| 
 | เวลาในการเชื่อมต่ออินเทอร์เน็ต | 
 | 
| 
 | จํานวนการเชื่อมต่ออินเทอร์เน็ต | 
 | 
| 
 | เวลาสถานะ Wi-Fi | 
 | 
| 
 | จํานวนสถานะ Wi-Fi | 
 | 
| 
 | เวลาสถานะผู้ขอเชื่อมต่อ Wi-Fi | 
 | 
| 
 | จํานวนสถานะผู้ขอ Wi-Fi | 
 | 
| 
 | ระยะเวลาความแรงของสัญญาณ Wi-Fi | 
 | 
| 
 | จํานวนความแรงของสัญญาณ Wi-Fi | 
 | 
| 
 | เวลาสถานะบลูทูธ | 
 | 
| 
 | จํานวนสถานะบลูทูธ | 
 | 
| 
 | สรุปการใช้พลังงาน | 
 | 
| 
 | รายการการใช้พลังงาน | 
 | 
| 
 | ขั้นตอนการจ่ายเงิน | 
 | 
| 
 | ขั้นตอนการเรียกเก็บเงิน | 
 | 
| 
 | เวลาที่เหลือจนแบตเตอรี่หมด | 
 | 
| 
 | เวลาในการชาร์จที่เหลือ | 
 | 
หมายเหตุ: ก่อนที่จะเป็น Android 6.0 ระบบจะติดตามการใช้พลังงานสำหรับวิทยุบลูทูธ วิทยุมือถือ และ Wi-Fi ในส่วนm (อื่นๆ)
 ใน Android 6.0 ขึ้นไป ระบบจะติดตามการใช้พลังงานของคอมโพเนนต์เหล่านี้ในส่วน pwi (รายการการใช้พลังงาน) พร้อมป้ายกำกับแต่ละรายการ (wifi, blue, cell) สำหรับแต่ละคอมโพเนนต์
ดูการจัดสรรหน่วยความจำ
คุณสามารถตรวจสอบการใช้หน่วยความจําของแอปได้ 2 วิธี ได้แก่ ในช่วงระยะเวลาหนึ่งโดยใช้ procstats หรือ ณ ช่วงเวลาหนึ่งโดยใช้ meminfo
ส่วนต่อไปนี้จะแสดงวิธีใช้ทั้ง 2 วิธี
procstats
procstats ช่วยให้คุณเห็นลักษณะการทํางานของแอปเมื่อเวลาผ่านไป ซึ่งรวมถึงระยะเวลาที่แอปทํางานในเบื้องหลังและปริมาณหน่วยความจําที่ใช้ในระหว่างนั้น ซึ่งจะช่วยให้คุณพบปัญหาการทำงานที่ไม่มีประสิทธิภาพและการทำงานที่ไม่ถูกต้องในแอปได้อย่างรวดเร็ว เช่น หน่วยความจำรั่ว ซึ่งอาจส่งผลต่อประสิทธิภาพของแอป โดยเฉพาะเมื่อทำงานในอุปกรณ์ที่มีหน่วยความจำต่ำ ข้อมูลการสำรองข้อมูลสถานะจะแสดงสถิติเกี่ยวกับรันไทม์ของทุกแอปพลิเคชัน ขนาดชุดข้อมูลตามสัดส่วน (PSS) ขนาดชุดข้อมูลที่ไม่ซ้ำกัน (USS) และขนาดชุดข้อมูลที่อยู่ในหน่วยความจำ (RSS)
หากต้องการดูสถิติการใช้หน่วยความจําของแอปพลิเคชันในช่วง 3 ชั่วโมงที่ผ่านมาในรูปแบบที่มนุษย์อ่านได้ ให้เรียกใช้คําสั่งต่อไปนี้
adb shell dumpsys procstats --hours 3
ดังที่แสดงในตัวอย่างต่อไปนี้ เอาต์พุตจะแสดงเปอร์เซ็นต์ของเวลาที่แอปพลิเคชันทำงานอยู่ และ PSS, USS และ RSS เป็นminPSS-avgPSS-maxPSS/minUSS-avgUSS-maxUSS/minRSS-avgRSS-maxRSS เทียบกับจำนวนตัวอย่าง
AGGREGATED OVER LAST 3 HOURS:
  * com.android.systemui / u0a37 / v28:
           TOTAL: 100% (15MB-16MB-17MB/7.7MB-8.7MB-9.4MB/7.7MB-9.6MB-84MB over 178)
      Persistent: 100% (15MB-16MB-17MB/7.7MB-8.7MB-9.4MB/7.7MB-9.6MB-84MB over 178)
  * com.android.se / 1068 / v28:
           TOTAL: 100% (2.8MB-2.9MB-2.9MB/300KB-301KB-304KB/304KB-22MB-33MB over 3)
      Persistent: 100% (2.8MB-2.9MB-2.9MB/300KB-301KB-304KB/304KB-22MB-33MB over 3)
  * com.google.android.gms.persistent / u0a7 / v19056073:
           TOTAL: 100% (37MB-38MB-40MB/27MB-28MB-29MB/124MB-125MB-126MB over 2)
          Imp Fg: 100% (37MB-38MB-40MB/27MB-28MB-29MB/124MB-125MB-126MB over 2)
  ...
  * com.android.gallery3d / u0a62 / v40030:
           TOTAL: 0.01%
        Receiver: 0.01%
        (Cached): 54% (6.4MB-6.5MB-6.9MB/4.4MB-4.4MB-4.4MB/4.4MB-26MB-68MB over 6)
  * com.google.android.tvlauncher / u0a30 / v1010900130:
           TOTAL: 0.01%
        Receiver: 0.01%
        (Cached): 91% (5.8MB-13MB-14MB/3.5MB-10MB-12MB/12MB-33MB-78MB over 6)
  * com.android.vending:instant_app_installer / u0a16 / v81633968:
           TOTAL: 0.01%
        Receiver: 0.01%
        (Cached): 100% (14MB-15MB-16MB/3.8MB-4.2MB-5.1MB/3.8MB-30MB-95MB over 7)
  ...
Run time Stats:
  SOff/Norm: +32m52s226ms
  SOn /Norm: +2h10m8s364ms
       Mod : +17s930ms
      TOTAL: +2h43m18s520ms
Memory usage:
  Kernel : 265MB (38 samples)
  Native : 73MB (38 samples)
  Persist: 262MB (90 samples)
  Top    : 190MB (325 samples)
  ImpFg  : 204MB (569 samples)
  ImpBg  : 754KB (345 samples)
  Service: 93MB (1912 samples)
  Receivr: 227KB (1169 samples)
  Home   : 66MB (12 samples)
  LastAct: 30MB (255 samples)
  CchAct : 220MB (450 samples)
  CchCAct: 193MB (71 samples)
  CchEmty: 182MB (652 samples)
  Cached : 58MB (38 samples)
  Free   : 60MB (38 samples)
  TOTAL  : 1.9GB
  ServRst: 50KB (278 samples)
          Start time: 2015-04-08 13:44:18
  Total elapsed time: +2h43m18s521ms (partial) libart.so
meminfo
คุณสามารถบันทึกภาพรวมของการแบ่งหน่วยความจําของแอประหว่างการจัดสรร RAM ประเภทต่างๆ ด้วยคําสั่งต่อไปนี้
adb shell dumpsys meminfo [-d] package_name|pid
Flag -d จะแสดงข้อมูลเพิ่มเติมเกี่ยวกับการใช้หน่วยความจำของ Dalvik และ ART
แฟล็ก -h จะพิมพ์แฟล็กที่รองรับทั้งหมด
เอาต์พุตจะแสดงการจัดสรรปัจจุบันทั้งหมดของแอป ซึ่งวัดเป็นกิโลไบต์
เมื่อตรวจสอบข้อมูลนี้ คุณควรคุ้นเคยกับการแบ่งประเภทต่อไปนี้
- RAM ส่วนตัว (Clean และ Dirty)
- นี่คือหน่วยความจําที่ใช้โดยกระบวนการของคุณเท่านั้น นี่เป็น RAM ส่วนใหญ่ที่ระบบสามารถเรียกคืนได้เมื่อกระบวนการของแอปถูกทำลาย โดยทั่วไปแล้ว ส่วนที่สําคัญที่สุดคือ RAM ที่สกปรกแบบส่วนตัว ซึ่งใช้พลังงานมากที่สุดเนื่องจากมีเพียงกระบวนการของคุณที่ใช้ RAM นี้ และเนื่องจากเนื้อหาของ RAM นี้อยู่ใน RAM เท่านั้น จึงไม่สามารถแบ่งออกเป็นหน้าๆ เพื่อส่งไปยังพื้นที่เก็บข้อมูลได้ เนื่องจาก Android ไม่ได้ใช้การแลกเปลี่ยน การจัดสรร Dalvik และกองข้อมูลเนทีฟทั้งหมดที่คุณทำเป็น RAM ส่วนตัวที่สกปรก การจัดสรร Dalvik และการจัดสรรแบบเนทีฟที่คุณแชร์กับกระบวนการ Zygote จะเป็น RAM ที่ใช้ร่วมกัน
- ขนาดชุดตามสัดส่วน (PSS)
- นี่คือการวัดการใช้ RAM ของแอปที่พิจารณาการแชร์หน้าเว็บในกระบวนการต่างๆ หน้า RAM ที่ไม่ซ้ำกันสำหรับกระบวนการของคุณจะส่งผลต่อค่า PSS โดยตรง ส่วนหน้าที่แชร์กับกระบวนการอื่นๆ จะส่งผลต่อค่า PSS ตามสัดส่วนของการแชร์เท่านั้น ตัวอย่างเช่น หน้าเว็บที่แชร์ระหว่าง 2 กระบวนการจะเพิ่มขนาดครึ่งหนึ่งของหน้านั้นลงใน PSS ของแต่ละกระบวนการ
ลักษณะของการวัด PSS คือคุณสามารถรวม PSS ของทุกกระบวนการเพื่อหาหน่วยความจําจริงที่ใช้โดยทุกกระบวนการ ซึ่งหมายความว่า PSS เป็นตัววัดที่ดีสำหรับน้ำหนัก RAM จริงของกระบวนการ และสำหรับการเปรียบเทียบกับการใช้ RAM ของกระบวนการอื่นๆ และ RAM ทั้งหมดที่ใช้ได้
ตัวอย่างเช่น ด้านล่างนี้คือเอาต์พุตสำหรับกระบวนการของแผนที่ในอุปกรณ์ Nexus 5
adb shell dumpsys meminfo -d com.google.android.apps.maps
หมายเหตุ: ข้อมูลที่คุณเห็นอาจแตกต่างจากที่แสดงที่นี่เล็กน้อย เนื่องจากรายละเอียดบางอย่างของเอาต์พุตจะแตกต่างกันไปตามเวอร์ชันแพลตฟอร์ม
** MEMINFO in pid 18227 [com.google.android.apps.maps] **
                   Pss  Private  Private  Swapped     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap    10468    10408        0        0    20480    14462     6017
  Dalvik Heap    34340    33816        0        0    62436    53883     8553
 Dalvik Other      972      972        0        0
        Stack     1144     1144        0        0
      Gfx dev    35300    35300        0        0
    Other dev        5        0        4        0
     .so mmap     1943      504      188        0
    .apk mmap      598        0      136        0
    .ttf mmap      134        0       68        0
    .dex mmap     3908        0     3904        0
    .oat mmap     1344        0       56        0
    .art mmap     2037     1784       28        0
   Other mmap       30        4        0        0
   EGL mtrack    73072    73072        0        0
    GL mtrack    51044    51044        0        0
      Unknown      185      184        0        0
        TOTAL   216524   208232     4384        0    82916    68345    14570
 Dalvik Details
        .Heap     6568     6568        0        0
         .LOS    24771    24404        0        0
          .GC      500      500        0        0
    .JITCache      428      428        0        0
      .Zygote     1093      936        0        0
   .NonMoving     1908     1908        0        0
 .IndirectRef       44       44        0        0
 Objects
               Views:       90         ViewRootImpl:        1
         AppContexts:        4           Activities:        1
              Assets:        2        AssetManagers:        2
       Local Binders:       21        Proxy Binders:       28
       Parcel memory:       18         Parcel count:       74
    Death Recipients:        2      OpenSSL Sockets:        2
dumpsys เวอร์ชันเก่าในแอป Gmail บน Dalvik มีดังนี้
** MEMINFO in pid 9953 [com.google.android.gm] **
                 Pss     Pss  Shared Private  Shared Private    Heap    Heap    Heap
               Total   Clean   Dirty   Dirty   Clean   Clean    Size   Alloc    Free
              ------  ------  ------  ------  ------  ------  ------  ------  ------
  Native Heap      0       0       0       0       0       0    7800    7637(6)  126
  Dalvik Heap   5110(3)    0    4136    4988(3)    0       0    9168    8958(6)  210
 Dalvik Other   2850       0    2684    2772       0       0
        Stack     36       0       8      36       0       0
       Cursor    136       0       0     136       0       0
       Ashmem     12       0      28       0       0       0
    Other dev    380       0      24     376       0       4
     .so mmap   5443(5) 1996    2584    2664(5) 5788    1996(5)
    .apk mmap    235      32       0       0    1252      32
    .ttf mmap     36      12       0       0      88      12
    .dex mmap   3019(5) 2148       0       0    8936    2148(5)
   Other mmap    107       0       8       8     324      68
      Unknown   6994(4)    0     252    6992(4)    0       0
        TOTAL  24358(1) 4188    9724   17972(2)16388    4260(2)16968   16595     336
 Objects
               Views:    426         ViewRootImpl:        3(8)
         AppContexts:      6(7)        Activities:        2(7)
              Assets:      2        AssetManagers:        2
       Local Binders:     64        Proxy Binders:       34
    Death Recipients:      0
     OpenSSL Sockets:      1
 SQL
         MEMORY_USED:   1739
  PAGECACHE_OVERFLOW:   1164          MALLOC_SIZE:       62
โดยทั่วไป ให้สนใจเฉพาะคอลัมน์ Pss Total และ Private Dirty
ในบางกรณี คอลัมน์ Private Clean และ Heap Alloc จะให้ข้อมูลที่น่าสนใจด้วย
ข้อมูลต่อไปนี้ให้ข้อมูลเพิ่มเติมเกี่ยวกับการจัดสรรหน่วยความจํารูปแบบต่างๆ ที่คุณควรสังเกต
- Dalvik Heap
- RAM ที่ใช้โดยการจัดสรร Dalvik ในแอปของคุณ Pss Totalรวมการจัดสรร Zygote ทั้งหมดโดยถ่วงน้ำหนักตามการแชร์ระหว่างกระบวนการต่างๆ ตามที่อธิบายไว้ในคำจำกัดความของ PSS ตัวเลขPrivate Dirtyคือ RAM จริงที่คอมมิตให้กับฮีปของแอปเท่านั้น ซึ่งประกอบด้วยการจองของคุณเองและหน้าการจองของ Zygote ที่มีการแก้ไขตั้งแต่แยกกระบวนการของแอปจาก Zygoteหมายเหตุ: ในแพลตฟอร์มเวอร์ชันใหม่ที่มีส่วน Dalvik OtherตัวเลขPss TotalและPrivate Dirtyสำหรับ Dalvik Heap จะไม่รวมค่าใช้จ่ายเพิ่มเติมของ Dalvik เช่น การคอมไพล์แบบทันท่วงที (JIT) และการบัญชี GC ส่วนเวอร์ชันเก่าจะแสดงข้อมูลทั้งหมดรวมกันในส่วนDalvikHeap Allocคือจํานวนหน่วยความจําที่ Dalvik และตัวจัดสรรฮีพแบบดั้งเดิมติดตามสําหรับแอปของคุณ ค่านี้จะมากกว่าPss TotalและPrivate Dirtyเนื่องจากกระบวนการของคุณแยกมาจาก Zygote และรวมการจัดสรรที่กระบวนการของคุณแชร์กับกระบวนการอื่นๆ ทั้งหมด
- .so mmapและ- .dex mmap
- RAM ที่ใช้สำหรับโค้ด .so(เนทีฟ) และ.dex(Dalvik หรือ ART) ที่แมป ตัวเลขPss Totalจะรวมโค้ดแพลตฟอร์มที่แชร์กันระหว่างแอปPrivate Cleanคือโค้ดของแอปคุณเอง โดยทั่วไปแล้ว ขนาดจริงที่แมปจะใหญ่กว่า RAM ในส่วนนี้เป็นเพียง RAM ที่ปัจจุบันจำเป็นต้องอยู่ใน RAM สำหรับโค้ดที่แอปเรียกใช้ อย่างไรก็ตาม.so mmapมีข้อมูลส่วนตัวที่เปลี่ยนแปลงขนาดใหญ่ ซึ่งเป็นเพราะการแก้ไขโค้ดเนทีฟเมื่อโหลดลงในที่อยู่สุดท้าย
- .oat mmap
- นี่คือปริมาณ RAM ที่รูปภาพโค้ดใช้ โดยอิงตามคลาสที่โหลดล่วงหน้าซึ่งแอปหลายแอปใช้กันโดยทั่วไป ระบบจะแชร์รูปภาพนี้ในแอปทั้งหมดและจะไม่ได้รับผลกระทบจากแอปใดแอปหนึ่ง
- .art mmap
- คือจํานวน RAM ที่รูปภาพกองขยะใช้ โดยอิงตามคลาสที่โหลดล่วงหน้าซึ่งแอปหลายแอปใช้กันโดยทั่วไป ระบบจะแชร์รูปภาพนี้ในแอปทั้งหมดและไม่ได้รับผลกระทบจากแอปใดแอปหนึ่ง แม้ว่ารูปภาพ ART จะมีอินสแตนซ์ Objectรายการ แต่ระบบจะไม่นับรวมกับขนาดฮีป
- .Heap(มีเฉพาะ Flag- -dเท่านั้น)
- นี่คือจำนวนหน่วยความจำฮีปสําหรับแอปของคุณ ซึ่งไม่รวมออบเจ็กต์ในพื้นที่รูปภาพและพื้นที่ออบเจ็กต์ขนาดใหญ่ แต่รวมพื้นที่ Zygote และพื้นที่คงที่
- .LOS(มีเฉพาะ Flag- -dเท่านั้น)
- คือจำนวน RAM ที่ใช้โดยพื้นที่ออบเจ็กต์ขนาดใหญ่ของ ART ซึ่งรวมถึงออบเจ็กต์ขนาดใหญ่ของ Zygote ออบเจ็กต์ขนาดใหญ่คือการจัดสรรอาร์เรย์พื้นฐานทั้งหมดที่มีขนาดใหญ่กว่า 12 KB
- .GC(มีเฉพาะ Flag- -dเท่านั้น)
- นี่คือค่าใช้จ่ายทั่วไปสำหรับระบบจัดการหน่วยความจำที่ไม่ใช้แล้ว ซึ่งไม่มีวิธีลดค่าใช้จ่ายเพิ่มเติมนี้
- .JITCache(มีเฉพาะ Flag- -dเท่านั้น)
- นี่คือจำนวนหน่วยความจำที่แคชข้อมูลและโค้ด JIT ใช้ โดยปกติแล้วค่านี้จะเท่ากับ 0 เนื่องจากแอปทั้งหมดจะคอมไพล์เมื่อติดตั้ง
- .Zygote(มีเฉพาะ Flag- -dเท่านั้น)
- นี่คือปริมาณหน่วยความจำที่ใช้โดยพื้นที่ Zygote ระบบจะสร้างพื้นที่ Zygote ในระหว่างที่อุปกรณ์เริ่มต้นและจะไม่จัดสรรพื้นที่ดังกล่าว
- .NonMoving(มีเฉพาะ Flag- -dเท่านั้น)
- คือจำนวน RAM ที่พื้นที่คงที่ของ ART ใช้ พื้นที่ที่ไม่ย้ายจะมีออบเจ็กต์พิเศษที่ย้ายไม่ได้ เช่น ฟิลด์และเมธอด คุณลดส่วนนี้ได้โดยใช้ช่องและเมธอดน้อยลงในแอป
- .IndirectRef(มีเฉพาะ Flag- -dเท่านั้น)
- คือจํานวน RAM ที่ตารางการอ้างอิงโดยอ้อมของ ART ใช้ โดยปกติแล้วจํานวนนี้จะน้อย แต่หากสูงเกินไป คุณอาจลดจํานวนนี้ได้ด้วยการลดจํานวนการอ้างอิง JNI ระดับภายในและระดับกลางที่ใช้
- Unknown
- หน้า RAM ที่ระบบไม่สามารถจัดประเภทเป็นรายการอื่นๆ ที่เฉพาะเจาะจงมากขึ้น ปัจจุบันข้อมูลนี้ส่วนใหญ่เป็นการจองแบบเนทีฟ ซึ่งเครื่องมือไม่สามารถระบุได้เมื่อรวบรวมข้อมูลนี้เนื่องจากการจัดเรียงพื้นที่ที่อยู่แบบสุ่ม (ASLR) เช่นเดียวกับกอง Dalvik Pss TotalforUnknownจะพิจารณาการแชร์กับ Zygote และPrivate Dirtyคือ RAM ที่ไม่รู้จักซึ่งจัดสรรไว้สําหรับแอปของคุณเท่านั้น
- TOTAL
- RAM ขนาดกลุ่มตามสัดส่วน (PSS) ทั้งหมดที่กระบวนการของคุณใช้ ค่านี้คือผลรวมของช่อง PSS ทั้งหมดที่อยู่ด้านบน ซึ่งระบุน้ำหนักหน่วยความจําโดยรวมของกระบวนการ ซึ่งสามารถเปรียบเทียบกับกระบวนการอื่นๆ และ RAM ทั้งหมดที่ใช้ได้โดยตรง
Private DirtyและPrivate Cleanคือการจัดสรรทั้งหมดภายในกระบวนการของคุณ ซึ่งจะไม่แชร์กับกระบวนการอื่นๆ เมื่อกระบวนการถูกทำลาย ระบบจะคืนค่า RAM ทั้งหมดจากการจองเหล่านี้กลับไปยังระบบ นอกจากนี้Private Cleanยังสามารถส่งไปยังหน้าอื่นและปล่อยได้ก่อนที่จะมีการทำลายกระบวนการ แต่Private Dirtyจะปล่อยได้ก็ต่อเมื่อมีการทำลายกระบวนการเท่านั้นDirty RAM คือหน้าเว็บที่มีการแก้ไขแล้ว จึงต้องอยู่ใน RAM ต่อไปเนื่องจากไม่มี Swap RAM ว่างคือหน้าเว็บที่แมปจากไฟล์ถาวร เช่น โค้ดที่กำลังดำเนินการ และสามารถย้ายออกได้หากไม่ได้ใช้งานเป็นระยะเวลาหนึ่ง 
- ViewRootImpl
- จํานวนมุมมองรูทที่ใช้งานอยู่ในกระบวนการ มุมมองรูทแต่ละรายการจะเชื่อมโยงกับหน้าต่าง ดังนั้นข้อมูลนี้จึงช่วยระบุปัญหาการสูญเสียหน่วยความจำที่เกี่ยวข้องกับกล่องโต้ตอบหรือหน้าต่างอื่นๆ ได้
- AppContextsและ- Activities
- จํานวนออบเจ็กต์ ContextและActivityของแอปที่แสดงอยู่ในกระบวนการของคุณในขณะนี้ ซึ่งจะช่วยให้คุณระบุออบเจ็กต์Activityที่รั่วไหลซึ่งระบบเก็บขยะไม่ได้ได้อย่างรวดเร็วเนื่องจากมีการอ้างอิงแบบคงที่ ซึ่งพบได้ทั่วไป ออบเจ็กต์เหล่านี้มักมีการจองอื่นๆ จำนวนมากเชื่อมโยงอยู่ด้วย ซึ่งทำให้เป็นวิธีที่ยอดเยี่ยมในการติดตามการรั่วไหลของหน่วยความจําจํานวนมาก
