1.1.1. 内存分析

adb shell procrank

PID       Vss      Rss      Pss      Uss     Swap    PSwap    USwap    ZSwap  cmdline
  390   576640K  394848K  389551K  388652K    3220K    3220K    3220K      10K  /vendor/bin/hw/android.hardware.camera.provider@2.4-service
 1687  1303876K  212472K  150646K  143456K   35320K   34092K   34028K     110K  com.zuoyebang.iot.desk.zdservice
  938  1651112K  156408K   80844K   66116K    5684K    4513K    4452K      14K  system_server
 1706  1161608K  136428K   73162K   64596K    4332K    3089K    3024K      10K  com.zuoyebang.iot.desk.zdlauncher
  284    72864K   59508K   57161K   57116K     152K     152K     152K       0K  /system/bin/logd
 1931  1111328K   77328K   20005K    6008K   22140K    4508K    2344K      14K  com.android.permissioncontroller
 1621  1082388K   68024K   12835K    7628K    1948K     664K     596K       2K  com.android.providers.media.module
 1422  1084220K   58516K   10719K    7188K    1912K     624K     556K       2K  com.android.phone

                           ------   ------   ------   ------   ------   ------  ------
                          931340K  829860K  381384K  189941K  165492K     615K  TOTAL

ZRAM: 640K physical used for 197632K in swap (1606252K total swap)
 RAM: 1784732K total, 55860K free, 496K buffers, 656736K cached, 7172K shmem, 150912K slab

从以上打印可以看出,一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)是单个进程全部可访问的地址空间 RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)是单个进程实际占用的内存大小,对于单个共享库, 尽管无论多少个进程使用,实际该共享库只会被装入内存一次。 PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存) USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)USS 是一个非常非常有用的数字, 因为它揭示了运行一个特定进程的真实的内存增量大小。如果进程被终止, USS 就是实际被返还给系统的内存大小。 USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。怀疑某个程序有内存泄露可以查看这个值是否一直有增加

1.1.2. adb shell top

Tasks: 353 total,   2 running, 349 sleeping,   0 stopped,   2 zombie
  Mem:  1784732K total,  1741028K used,  44752896 free,    507904 buffers
 Swap:  1606252K total,   197632K used,  1408620K free,   649028K cached
800%cpu 111%user  32%nice  43%sys 606%idle   0%iow   5%irq   3%sirq   0%host
   PID USER         PR  NI VIRT  RES  SHR S[%CPU] %MEM     TIME+ ARGS           
  1687 system       20   0 1.2G  69M  69M S 74.3   3.9 3008:18.4 com.zuoyebang.+
   390 cameraserver 20   0 564M 334M 7.6M S 58.0  19.1 1686:41.9 android.hardwa+
   284 logd         30  10  71M  58M 2.4M S 37.3   3.3 766:20.76 logd
   489 system       20   0 7.7M 2.4M 2.2M R  8.0   0.1 273:35.69 ylogkat -v uid
   366 system       20   0 102M 6.1M 2.3M S  7.6   0.3 276:20.18 ylog
   581 cameraserver 20   0  49M  10M 8.0M S  3.6   0.5 122:56.36 cameraserver
   491 root         20   0 8.8M 2.7M 2.6M S  2.6   0.1  79:06.43 dmesg -Tw
   402 root         20   0  14M 3.2M 2.8M S  2.6   0.1 106:46.04 vendor.unisoc.+
   220 root         RT   0    0    0    0 S  2.0   0.0  85:37.42 [sugov:0]
 19721 root         20   0 9.3M 3.8M 3.0M R  1.6   0.2   0:00.26 top
  2173 root         20   0    0    0    0 S  1.0   0.0  29:58.34 [isp_ctx1_offl+
  2172 root         20   0    0    0    0 S  1.0   0.0  19:15.22 [isp_ctx0_offl+
   221 root         20   0    0    0    0 S  0.6   0.0  25:11.22 [sugov_perf:0]
  2110 root         20   0    0    0    0 S  0.3   0.0   8:11.64 [cam0_capture]
   697 system       20   0  17M 2.9M 2.6M S  0.3   0.1   2:58.98 thermald
   641 system       20   0  23M 3.3M 2.0M S  0.3   0.1  20:12.94 slogmodem
   495 system       20   0 7.1M 2.1M 1.9M S  0.3   0.1   1:41.83 sh /system/bin+
   480 system       20   0  12M 2.7M 2.4M S  0.3   0.1  10:50.05 ylogw w 15 11 +
    40 root         20   0    0    0    0 S  0.3   0.0   0:00.45 [ksoftirqd/6]
    20 root         20   0    0    0    0 S  0.3   0.0   0:44.92 [ksoft
cpu状态  
400%cpu -- CPU总量
8%user -- 用户空间占用CPU的百分比。
0%nice -- 改变过优先级的进程占用CPU的百分比
41%sys -- 内核空间占用CPU的百分比
394%idle -- 空闲CPU百分比
0%iow  --  IO等待占用CPU的百分比
0%irq -- 硬中断(Hardware IRQ)占用CPU的百分比
0%sirq --  软中断(Software Interrupts)占用CPU的百分比
0%host -- 

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量(virtual memory usage),单位kb。VIRT=SWAP+RES
      1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
      2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES — resident memory usage 常驻内存,单位kb。RES=CODE+DATA
      1、进程当前使用的内存大小,但不包括swap out
      2、包含其他进程的共享
      3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
      4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR — 共享内存(shared memory),单位kb
      1、除了自身进程的共享内存,也包括其他进程的共享内存
      2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
      3、计算某个进程所占的物理内存大小公式:RES – SHR
      4、swap out后,它将会降下来
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
ARGS — 进程名称(命令名/命令行)
实存(RES) 与 虚存(VIRT)分析

VIRT:

  1. 进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;
  2. 假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。
  3. VIRT = SWAP + RES

RES:

  1. 进程当前使用的内存大小,包括使用中的malloc、new分配的堆空间和分配的栈空间,但不包括swap ou量;
  2. 包含其他进程的共享;
  3. 如果申请10MB的内存,实际使用1MB,它只增长1MB;
  4. 关于库占用内存的情况,它只统计加载的库文件所占内存大小。
  5. RES = CODE + DATA

SHR:

  1. 除了自身进程的共享内存,也包括其他进程的共享内存;
  2. 虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小;
  3. 计算某个进程所占的物理内存大小公式:RES – SHR;
  4. swap out后,它将会降下来。

具体信息可以查看源代码中: xx\system\core\toolbox\top.c


http://gityuan.com/2016/01/02/memory-analysis-command/

Copyright © tracyliu-FE 2021 all right reserved,powered by Gitbook文件修订时间: 2022-05-09 15:26:40

results matching ""

    No results matching ""