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分配使用,GPU是mali)
前两个命令只能查到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