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