dumpsys meminfo詳解
adb shell dumpsys meminfo [pkg/pid] 可以用來查看指定進程包名的內存使用情況
dumpsys meminfo -h 幫助
meminfo dump options: [-a] [-d] [-c] [-s] [--oom] [process]
-a: include all available information for each process.
-d: include dalvik details.
-c: dump in a compact machine-parseable representation.
-s: dump only summary of application memory usage.
-S: dump also SwapPss.
--oom: only show processes organized by oom adj.
--local: only collect details locally, don't call process.
--package: interpret process arg as package, dumping all
processes that have loaded that package.
--checkin: dump data for a checkin
If [process] is specified it can be the name or
pid of a specific process to dump.
名詞概念:
- 虛擬內存:進程空間內的虛擬內存地址,理論上32位cpu一個進程有4GB的虛擬內存可以使用。
- 物理內存:就是真正寫的到內存條上的,真實地址對進程不可見,由操作系統把虛擬內存地址映射到物理內存地址。
- Size:指的就是分配了多少虛擬內存
- Rss、Pss指的是實際物理內存使用的大小,由於這個內存段是純new出來的,沒有共享庫,所以這兩個值是一樣的。由於只給4MB的數組賦值,操作系統只給分配了4MB的真實物理內存。
- Objects是統計App內部組件對象個數,其中Views、ViewRootImpl以及Activities個數,在Activity onDestroy后應該都會回收清零,如果onDestroy調用后這幾個對象個數沒有清零,就可能發生了內存泄漏。
- android程序內存被分為2部分:native和dalvik,dalvik就是java堆,普通java對象是在java堆分配,而bitmap是直接在native上分配,對於內存的限制是 native+dalvik 不能超過最大限制。
名詞解釋:
名詞 | 說明 | 補充 |
Uptime |
表示啟動到現在的時長,不包含休眠的時間,單位毫秒(ms) |
|
Realtime |
表示啟動到現在的時長,包含休眠的時間,單位毫秒(ms) |
|
Native Heap |
指c 中malloc出來的堆空間 |
擴展:c++申請的內存為native process,java申請的內存:java process |
Dalvik Heap |
指java中new出來的java堆空間 |
只是占用的虛擬內存的空間 |
Pss Total | 指占用了真實的物理內存的空間 | |
private dirty | 指私有駐留內存 | 擴展:進程內存空間是虛擬內存,區分於物理內存,進程無法直接操作物理內存RAM。必要時,操作系統對其進行映射,使進程能應用到物理內存 |
Heap Size | 指占用總內存(Heap 堆) | |
Heap Alloc | 指在虛擬地址中分配了這么多空間 | |
Heap Free | 空閑內存 |
注:因為Android系統對dalvik的vm heapsize作了硬性限制,當java進程申請的java空間超過閾值時,就會拋出OOM異常(這個閾值可以是48M、24M、16M等,視機型而定)
查看單個應用最大內存限制,輸入命令:getprop|grep heapgrowthlimit 得到結果該機型為192M。dalvik process 超過就會拋OOM異常
Applications Memory Usage (in Kilobytes): Uptime: 246353123 Realtime: 292602983 ** MEMINFO in pid 8410 [com.doctopia.zeroe] ** Pss Private Private SwapPss Heap Heap Heap Total Dirty Clean Dirty Size Alloc Free ------ ------ ------ ------ ------ ------ ------ Native Heap 52421 52336 24 0 82432 61868 20563 Dalvik Heap 31844 31816 4 0 38652 30460 8192 Dalvik Other 14051 14048 0 12 Stack 3640 3640 0 28 Ashmem 80 48 0 0 Gfx dev 12848 12288 560 0 Other dev 76 0 76 0 .so mmap 2292 936 252 95 .jar mmap 0 0 0 0 .apk mmap 1642 76 1064 0 .ttf mmap 0 0 0 0 .dex mmap 6073 5860 132 4 .oat mmap 2153 0 0 0 .art mmap 2682 2408 8 82 Other mmap 312 8 184 0 EGL mtrack 432 432 0 0 GL mtrack 26160 26160 0 0 Unknown 14579 14576 0 18 TOTAL 171524 164632 2304 239 121084 92328 28755 App Summary Pss(KB) ------ Java Heap: 34232 Native Heap: 52336 Code: 8320 Stack: 3640 Graphics: 39440 Private Other: 28968 System: 4588 TOTAL: 171524 TOTAL SWAP PSS: 239 Objects Views: 821 ViewRootImpl: 2 AppContexts: 6 Activities: 3 Assets: 6 AssetManagers: 3 Local Binders: 62 Proxy Binders: 36 Parcel memory: 24 Parcel count: 98 Death Recipients: 2 OpenSSL Sockets: 25 WebViews: 1 SQL MEMORY_USED: 279 PAGECACHE_OVERFLOW: 76 MALLOC_SIZE: 62 DATABASES pgsz dbsz Lookaside(b) cache Dbname 4 24 38 1254/33/7 /data/user/0/com.doctopia.zeroe/databases/sensorsdata 4 60 136 141/56/20 /data/user/0/com.doctopia.zeroe/databases/bugly_db_ Asset Allocations zip:/data/app/com.doctopia.zeroe-1/base.apk:/resources.arsc: 972K
其他常用服務信息查詢
- 內存 adb shell dumpsys meminfo
- CPU adb shell dumpsys cpuinfo
- 幀率 adb shell dumpsys gfxinfo
- 顯示 adb shell dumpsys display
- 電源 adb shell dumpsys power
- 電池狀態 adb shell dumpsys batterystats
- 電池 adb shell dumpsys battery
- 鬧鍾 adb shell dumpsys alarm
- 位置 adb shell dumpsys location