吐血整理!究极深入Android内存优化(三)

4、小结

在研发阶段需要不断实现 更多的工具和组件,以此系统化地提升自动化程度,以最终 提升发现问题的效率

七、内存优化工具

除了常用的内存分析工具 Memory Profiler、MAT、LeakCanary 之外,还有一些其它的内存分析工具,下面我将一一为大家进行介绍。

1、top

top 命令是 Linux 下常用的性能分析工具,能够 实时显示系统中各个进程的资源占用状况,类似于 Windows 的任务管理器。top 命令提供了 实时的对系统处理器的状态监视。它将 显示系统中 CPU 最“敏感”的任务列表。该命令可以按 CPU使用、内存使用和执行时间 对任务进行排序

接下来,我们输入以下命令查看top命令的用法:

quchao@quchaodeMacBook-Pro ~ % adb shell top --help
usage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-d SECONDS] [-p PID,] [-u USER,]

Show process activity in real time.

-H	Show threads
-k	Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID)
-o	Show FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE)
-O	Add FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default)
-s	Sort by field number (1-X, default 9)
-b	Batch mode (no tty)
-d	Delay SECONDS between each cycle (default 3)
-n	Exit after NUMBER iterations
-p	Show these PIDs
-u	Show these USERs
-q	Quiet (no header lines)

Cursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force
update, R to reverse sort, Q to exit.

这里使用 top 仅显示一次进程信息,以便来讲解进程信息中各字段的含义。

image.png

整体的统计信息区

前四行 是当前系统情况 整体的统计信息区。下面我们看每一行信息的具体意义。

第一行:Tasks — 任务(进程)

具体信息说明如下所示:

系统现在共有 729 个进程,其中处于 运行中 的有 1 个,715 个在 休眠(sleep)stoped 状态的有0个,zombie 状态(僵尸)的有 8 个。

第二行:内存状态

具体信息如下所示:

  • 1)、5847124k total:物理内存总量(5.8GB)
  • 2)、5758016k used:使用中的内存总量(5.7GB)
  • 3)、89108k free:空闲内存总量(89MB)
  • 4)、112428k buffers:缓存的内存量 (112M)
第三行:swap交换分区信息

具体信息说明如下所示:

  • 1)、2621436k total:交换区总量(2.6GB)
  • 2)、612572k used:使用的交换区总量(612MB)
  • 3)、2008864k free:空闲交换区总量(2GB)
  • 4)、2657696k cached:缓冲的交换区总量(2.6GB)
第四行:cpu状态信息

具体属性说明如下所示:

  • 1)、800% cpu:8核 CPU
  • 2)、39% user:39% CPU被用户进程使用
  • 3)、0% nice:优先值为负的进程占 0%
  • 4)、42% sys — 内核空间占用 CPU 的百分比为 42%
  • 5)、712% idle:除 IO 等待时间以外的其它等待时间为 712%
  • 6)、0% iow:IO 等待时间占 0%
  • 7)、0% irq:硬中断时间占 0%
  • 8)、6% sirq - 软中断时间占 0%

对于内存监控,在 top 里我们要时刻监控 第三行 swap 交换分区的 used,如果这个数值在不断的变化,说明内核在不断进行内存和 swap 的数据交换,这是真正的内存不够用了。

进程(任务)的状态监控

在 第五行及以下,就是各进程(任务)的状态监控,项目列信息说明如下所示:

  • 1)、PID:进程 id
  • 2)、USER:进程所有者
  • 3)、PR:进程优先级
  • 4)、NI:nice 值。负值表示高优先级,正值表示低优先级
  • 5)、VIRT:进程使用的虚拟内存总量。VIRT = SWAP + RES
  • 6)、RES:进程使用的、未被换出的物理内存大小。RES = CODE + DATA
  • 7)、SHR:共享内存大小
  • 8)、S:进程状态。D = 不可中断的睡眠状态、R = 运行、 S = 睡眠、T = 跟踪 / 停止、Z = 僵尸进程
  • 9)、%CPU — 上次更新到现在的 CPU 时间占用百分比
  • 10)、%MEM:进程使用的物理内存百分比
  • 11)、TIME+:进程使用的 CPU 时间总计,单位 1/100秒
  • 12)、ARGS:进程名称(命令名 / 命令行)

从上图中可以看到,第一行的就是 Awesome-WanAndroid 这个应用的进程,它的进程名称为 json.chao.com.w+,PID 为 23104,进程所有者 USER 为 u0_a714,进程优先级 PR 为 10,nice 置 NI 为 -10。进程使用的虚拟内存总量 VIRT 为 4.3GB,进程使用的、未被换出的物理内存大小 RES 为138M,共享内存大小 SHR 为 66M,进程状态 S 是睡眠状态,上次更新到现在的 CPU 时间占用百分比 %CPU 为 21.2。进程使用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值