内存分析常用命令介绍

adb shell dumpsys meminfo mediaserver    //[android]dumpsys meminfo for single process
adb shell cat proc/[mediaserver pid]/maps
adb shell cat proc/`pidof [pid]`/smaps    //[linnux kernel] 非ion内存,需要root权限

adb shell cat /proc/meminfo               //[linux kernel] 系统角度memory的使用情况
adb shell showmap`pidof [pid]`      //[android]非ion内存,需要root权限

adb shell pmap -x `pidof [pid]`      //[android]非ion内存,需要root权限
adb shell dumpsys meminfo        //[android]dumpsys meminfo for all process
adb shell cat /proc/mali/memory_usage
adb shell cat /sys/kernel/debug/ion/ion_mm_heap  ---》可用于分析EGL占用的内存(EGL
是由ion来分配管理)分析ion内存,需要root权限

adb shell cat /proc/mali/memory_usage      ---》可用于分析GL占用的内存(GL是由GPU分配使用,GPUmali)

前两个命令只能查到VSS RSS内存占用信息,而后面两个命令可以查出  PSS USS内存占用,

  • VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
  • RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)
  • PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
  • USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)USS 是一个非常非常有用的数字, 因为它揭示了运行一个特定进程的真实的内存增量大小。如果进程被终止, USS 就是实际被返还给系统的内存大小。
    USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。怀疑某个程序有内存泄露可以查看这个值是否一直有增加

般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

 

Overview

The aim of this post is to provide information that will assist in interpreting memory reports from various tools so the true memory usage for Linux processes and the system can be determined.

Android has a tool called procrank (/system/xbin/procrank), which lists out the memory usage of Linux processes in order from highest to lowest usage. The sizes reported per process are VSS, RSS, PSS, and USS.

For the sake of simplicity in this description, memory will be expressed in terms of pages, rather than bytes. Linux systems like ours manage memory in 4096 byte pages at the lowest level.

VSS (reported as VSZ from ps) is the total accessible address space of a process.This size also includes memory that may not be resident in RAM like mallocs that have been allocated but not written to. VSS is of very little use for determing real memory usage of a process.

RSS is the total memory actually held in RAM for a process.RSS can be misleading, because it reports the total all of the shared libraries that the process uses, even though a shared library is only loaded into memory once regardless of how many processes use it. RSS is not an accurate representation of the memory usage for a single process.

PSS differs from RSS in that it reports the proportional size of its shared libraries, i.e. if three processes all use a shared library that has 30 pages, that library will only contribute 10 pages to the PSS that is reported for each of the three processes. PSS is a very useful number because when the PSS for all processes in the system are summed together, that is a good representation for the total memory usage in the system. When a process is killed, the shared libraries that contributed to its PSS will be proportionally distributed to the PSS totals for the remaining processes still using that library. In this way PSS can be slightly misleading, because when a process is killed, PSS does not accurately represent the memory returned to the overall system.

USS is the total private memory for a process, i.e. that memory that is completely unique to that process.USS is an extremely useful number because it indicates the true incremental cost of running a particular process. When a process is killed, the USS is the total memory that is actually returned to the system. USS is the best number to watch when initially suspicious of memory leaksin a process.

For systems that have Python available, there is also a nice tool calledsmem that will report memory statistics including all of these categories.

 

C:\Users\xxx>adb shell procrank

  PID       Vss      Rss      Pss      Uss     Swap    PSwap    USwap    ZSwap  cmdline

 7456  1224908K  142072K  119566K  111536K    7936K    2000K       0K     461K  com.facebook.katana

  847  1594988K  114696K   74404K   69960K   12200K    3564K    3128K     821K  system_server

 1082  1658888K   95716K   53060K   48392K   11608K    3007K    2576K     693K  com.android.systemui

 1730  2030632K   88452K   47210K   43420K    9160K     438K       0K     101K  com.transsion.hilaunch

*****************************************************************************************************

C:\Users\xxx>adb shell top -m 10   //m 代表显示个数

User 36%, System 54%, IOW 0%, IRQ 0%

User 4 + Nice 0 + Sys 6 + Idle 1 + IOW 0 + IRQ 0 + SIRQ 0 = 11

 

  PID USER     PR  NI CPU% S  #THR     VSS     RSS PCY Name

 8096 root     20   0  90% R     1  17288K   2224K  fg top

    2 root     20   0   0% S     1      0K      0K  fg kthreadd

    3 root     20   0   0% S     1      0K      0K  fg ksoftirqd/0

    5 root      0 -20   0% S     1     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值