adb shell 查询Android应用cpu内存占用及优化

打印 上一主题 下一主题

主题 1014|帖子 1014|积分 3046

在Android系统性能分析时,常常会拿到系统历史cpu和内存占用日志,
来分析某段时间哪些应用cpu和内存占用是否特殊高以及厘革来确定应用内存或cpu是否必要优化。
一、cpu占用查询及优化


1.获取系统中所有应用的cpu占用
adb shell top 获取系统中所有应用cpu占用并按照cpu占用率从大到小排序。
参数-m 可以指定 最多显示多少个进程
2.获取某个应用cpu内存占用率
先通过下令获取包名对应的pid,下令:adb shell pidof 应用包名
lilei@lilei-HP-Z4-G4-Workstation:~$ adb shell pidof 应用包名
3642
2.1 然后根据进程id(3642)获取该应用cpu占用情况,
下令:adb shell top -b -n 1 -p 3642,
查找包含pid 3642第9列就是cpu占用率0.0%内存占用率1.6 
  1. lilei@lilei-HP-Z4-G4-Workstation:~$ adb shell top -b -n 1 -p 3642
  2. Tasks: 1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
  3.   Mem: 11400952K total,  7869960K used,  3530992K free,  40607744 buffers
  4.  Swap:  3145724K total,         0 used,  3145724K free,  2803496K cached
  5. 800%cpu 221%user   0%nice 125%sys 429%idle   0%iow  18%irq   7%sirq   0%host
  6.    PID USER         PR  NI VIRT  RES  SHR S[%CPU] %MEM     TIME+ ARGS
  7.   3642 system       -2   0  16G 183M 129M S  0.0   1.6   0:14.44 应用包名
复制代码
2.2 然后根据进程id(3642)获取该应用各个线程占用cpu情况,
下令:adb shell top -H -d 1 -p 3642 -O cpu
  1. Threads: 32 total,   0 running,  32 sleeping,   0 stopped,   0 zombie
  2.   Mem: 11400952K total,  8106876K used,  3294076K free,  61607936 buffers
  3.  Swap:  3145724K total,         0 used,  3145724K free,  2929148K cached
  4. 800%cpu 223%user   0%nice 131%sys 421%idle   0%iow  17%irq   8%sirq   0%host
  5.   TID USER        [CPU]%CPU  %MEM     TIME+ THREAD          PROCESS             
  6. 30998 system         4  0.0   1.6   0:00.00 AdrenoOsLib     应用包名
  7. 30962 system         5  0.0   1.6   0:00.15 RenderThread    应用包名
  8.  9141 system         2  0.0   1.6   0:00.00 Binder:3642_5   应用包名
  9.  4172 system         7  0.0   1.6   0:00.00 queued-work-loo 应用包名
  10.  3987 system         4  0.0   1.6   0:02.07 subscriber      应用包名
  11.  3985 system         2  0.0   1.6   0:00.00 ion.xxxxxxxxxxxx 应用包名
  12.  3984 system         3  0.0   1.6   0:00.00 ion.xxxxxxxxxxxx 应用包名
  13.  3982 system         2  0.0   1.6   0:02.44 ion.xxxxxxxxxxxx 应用包名
  14.  3981 system         2  0.0   1.6   0:00.00 ion.xxxxxxxxxxxx 应用包名
  15.  3979 system         2  0.0   1.6   0:01.67 VATimer         应用包名
  16.  3977 system         3  0.0   1.6   0:00.00 Thread-3        应用包名
  17.  3976 system         3  0.0   1.6   0:00.00 Thread-2        应用包名
  18.  3963 system         3  0.0   1.6   0:00.00 DmsSceneWorkerT 应用包名
  19.  3962 system         3  0.0   1.6   0:00.00 Speech_HT       应用包名
  20.  3961 system         7  0.0   1.6   0:00.18 MSG_BASE_MODULE 应用包名
  21.  3960 system         3  0.0   1.6   0:00.00 StatisticsWorke 应用包名
  22.  3959 system         6  0.0   1.6   0:00.00 Rpc-Handler     应用包名
  23.  3958 system         3  0.0   1.6   0:00.00 HwBinder:3642_1 应用包名
  24.  3935 system         2  0.0   1.6   0:00.09 Binder:3642_4   应用包名
  25.  920 system         5  0.0   1.6   0:00.20 Profile Saver   应用包名
复制代码

 
 3.CPU 优化方法
1.线程池复用,减少CPU调度开销
2.资源拷贝优化,减少读取IO时间
3.线程定名,方便定位题目
4.非须要内容,延迟初始化
5.初始化使命优先级分配,削峰填谷
 二、内存占用查询及优化


1.获取系统中所有应用的内存占用
下令:adb shell dumpsys meminfo
可以查询系统所有应用的内存占用及占用排序。
2.获取某个应用内存占用 大小
dumpsys meminfo 应用包名,查询应用内存占用,如下dumpsys信息中第一个包含TOTAL关键字行第二列就是应用的总内存为84415(KB)
TOTAL    84415    32336    43068        0    84415    37040    23405     9641
  1. lilei@lilei-HP-Z4-G4-Workstation:~$ adb shell dumpsys meminfo 应用包名
  2. Applications Memory Usage (in Kilobytes):
  3. Uptime: 5566435 Realtime: 5566435
  4. ** MEMINFO in pid 3642 [应用包名] **
  5.                    Pss  Private  Private     Swap      Rss     Heap     Heap     Heap
  6.                  Total    Dirty    Clean    Dirty    Total     Size    Alloc     Free
  7.                 ------   ------   ------   ------   ------   ------   ------   ------
  8.   Native Heap    14231    14200        0        0    17256    25848    17809     4045
  9.   Dalvik Heap     4716     4652        0        0     9108    11192     5596     5596
  10.  Dalvik Other     3302     2412        0        0     4808                           
  11.         Stack      840      840        0        0      848                           
  12.        Cursor        2        0        0        0        4                           
  13.        Ashmem        2        0        0        0        8                           
  14.     Other dev      160        0      160        0      444                           
  15.      .so mmap     7128      624     1644        0    53852                           
  16.     .jar mmap     1103        0       20        0    30596                           
  17.     .apk mmap    27710      148    26900        0    30404                           
  18.     .ttf mmap       45        0        0        0      288                           
  19.     .dex mmap        0        0        0        0      132                           
  20.     .oat mmap       26        0        0        0     2440                           
  21.     .art mmap     7751     7580        0        0    20256                           
  22.    Other mmap    16815     1312    14344        0    20544                           
  23.       Unknown      584      568        0        0     1252                           
  24.         TOTAL    84415    32336    43068        0    84415    37040    23405     9641
  25.  
  26.  App Summary
  27.                        Pss(KB)                        Rss(KB)
  28.                         ------                         ------
  29.            Java Heap:    12232                          29364
  30.          Native Heap:    14200                          17256
  31.                 Code:    29380                         119628
  32.                Stack:      840                            848
  33.             Graphics:        0                              0
  34.        Private Other:    18752
  35.               System:     9011
  36.              Unknown:                                   25144
  37.  
  38.            TOTAL PSS:    84415            TOTAL RSS:   192240      TOTAL SWAP (KB):        0
  39.  
  40.  Objects
  41.                Views:      337         ViewRootImpl:        1
  42.          AppContexts:        6           Activities:        1
  43.               Assets:        6        AssetManagers:        0
  44.        Local Binders:       53        Proxy Binders:       51
  45.        Parcel memory:        7         Parcel count:       28
  46.     Death Recipients:       23      OpenSSL Sockets:        0
  47.             WebViews:        0
  48.  
  49.  SQL
  50.          MEMORY_USED:        0
  51.   PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:        0
复制代码

 
3.内存 优化方法
3.1、内存抖动
现象:应用内存波动图形呈 锯齿状。
原因:步伐中频繁创建对象会导致内存频繁分配和回收。
优化方向:减少在循环或频繁调用的方法中创建对象,可以使用缓存机制或对象池来复用对象。
如:使用StringBuilder或String.format等方法举行字符串拼接,制止使用加号拼接,以减少暂时对象的生成等。
3.2、内存走漏
现象:应用内存不断增长
原因:对象被持有导致无法开释或不能按照对象正常的生命周期举行开释
优化方向:
1.制止单例模式持有外部类的引用。
2.制止非静态内部类或匿名类默认持有外部类的引用。
3制止静态成员变量持有外部类的引用造成的内存走漏。
4.广播不必要监听时必要即使注销。
5.数据库游标Cursor不消时必要及时开释。
6.WebView不必要展示时必要及时开释webview的资源。
3.3、内存溢出
现象:E/AndroidRuntime(13316): java.lang.OutOfMemoryError
原因:内存走漏累积到一定水平导致OOM,或者一次性申请许多内存
优化方向:
1.制止内存泄漏。
2..制止一次创建大的数组或者是载入大的文件如图片。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表