Android 分析应用程序占用native内存
Android 应用开发大家都知道可以通过DDMS来查看应用程序进程占用的内存大小;然而Native 内存并不能在虚拟堆上看到;Android系统基于Linux,这样的话其具备Linux的大多数特性;在Linux当中有不少方法可以查看进程占用的内存,可以采用图形界面工具,也可以采用命令,具体如何查看这边就不介绍了。
Android Native 内存查看:
1.首先需要确保你的PC上装了adb工具;不同平台安装相应的版本。
2.adb shell 然后通过ps 命令查看手机上的进程。
1. u0_a101 18271 174 656392 32856 ffffffff 00000000 S com.baidu.map.location
2. u0_a101 18286 174 654332 34288 ffffffff 00000000 S com.baidu.map.location:re
3. mote
4. u0_a58 18325 174 673716 38868 ffffffff 00000000 S com.xiaomi.channel:pushse
5. rvice
6. u0_a58 18347 174 688288 43628 ffffffff 00000000 S com.xiaomi.channel
7. root 18380 2 0 0 ffffffff 00000000 S kworker/0:3
8. u0_a11 18440 174 686980 41256 ffffffff 00000000 S com.google.process.gapps
9. u0_a11 18470 174 674016 36508 ffffffff 00000000 S com.google.android.gms
10. u0_a11 18497 174 676944 38440 ffffffff 00000000 S com.google.android.gsf.lo
11. gin
12. u0_a11 18517 174 684580 41268 ffffffff 00000000 S com.google.process.locati
13. on
14. u0_a12 18588 174 654444 32760 ffffffff 00000000 S com.miui.cloudservice
15. u0_a74 18623 174 838968 123264 ffffffff 00000000 R com.android.chrome
16. u0_i134 18654 174 747068 56468 ffffffff 00000000 S com.android.chrome:sandbo
17. xed_process0
18. u0_a23 18767 174 654368 32372 ffffffff 00000000 S com.google.android.partne
19. rsetup
3.查看进程:下面以com.android.chrome为例
找到com.android.chrome 进程id是18623:在终端上输入:
1. shell@android:/ $ cat /proc/18623/status
1. cat /proc/18623/status
2. Name: .android.chrome
3. State: S (sleeping)
4. Tgid: 18623
5. Pid: 18623
6. PPid: 174
7. TracerPid: 0
8. Uid: 10074 10074 10074 1007
9. Gid: 10074 10074 10074 1007
10. FDSize: 256
11. Groups: 1006 1015 1028 3003
12. VmPeak: 842864 kB
13. VmSize: 811216 kB
14. VmLck: 0 kB
15. VmPin: 0 kB
16. VmHWM: 126080 kB
17. <strong>VmRSS: 125484 kB</strong>
18. VmData: 69156 kB
19. VmStk: 136 kB
20. VmExe: 8 kB
21. VmLib: 68128 kB
22. VmPTE: 298 kB
23. VmSwap: 0 kB
24. Threads: 46
25. SigQ: 0/14952
26. SigPnd: 0000000000000000
27. ShdPnd: 0000000000000000
28. SigBlk: 0000000000001204
29. SigIgn: 0000000000000000
30. SigCgt: 00000002000094e8
31. CapInh: 0000000000000000
32. CapPrm: 0000000000000000
33. CapEff: 0000000000000000
34. CapBnd: ffffffffffffffff
35. Cpus_allowed: f
36. Cpus_allowed_list: 0-3
37. voluntary_ctxt_switches: 2759
38. nonvoluntary_ctxt_switches: 2591
4.分析内存
熟悉Linux的童鞋知道proc目录下存放的是进程的各种信息;
第三步中看到的VmRSS就是进程当前占用的实际内存。
具体其他参数可以参考:进程信息参数详解
1. <span >rss %ld (24) Resident Set Size: number of pages the
2. process has in real memory. This is just the
3. pages which count toward text, data, or stack
4. space. This does not include pages which have not
5. been demand-loaded in, or which are swapped out.</span>
5.ps会列出很多进程我们有时候需要直接找到对应的进程,linux大家都知道可以通过grep、或者find找到直接找到进程;
adb shell;trim版本的linux ,不直接支持这些命令;不过有个方法是通过busybox来解决;下面以查找chrome为例:
1. <span >shell@android:/ $ ps | busybox grep chrome
2. ps | busybox grep chrome
3. u0_a74 18623 174 837800 125568 ffffffff 00000000 S com.android.chrome
4. u0_i134 18654 174 752124 55908 ffffffff 00000000 S com.android.chrome:sandbo
5. xed_process0</span>
1. <span >shell@android:/ $ ps | busybox grep chrome
2. ps | busybox grep chrome
3. u0_a74 18623 174 837800 125568 ffffffff 00000000 S com.android.chrome
4. u0_i134 18654 174 752124 55908 ffffffff 00000000 S com.android.chrome:sandbo
5. xed_process0</span>