Performance(CPU/MEM) Monitoring with /proc in Android

/proc/stat

记录了CPU使用的数据,比如CPU在用户态、nice和内核态的时间,其单位是USER_HZ or Jiffies (1/100 seconds)

> adb shell cat /proc/stat

cpu  18485 385 17818 1731820 10138 10 244 0 0 0
cpu0 16059 283 16775 847113 8982 10 243 0 0 0
intr 742034 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 335460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4502 271 0 12616 0 0 0 0 0 0 0 0 0 0 0 0 0 0 474 4 0 0 0 0 0 0 0 0 0 13652 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 13225 0 0 0 0 4039 0 1094 0 1655 0 0 0 0 1 956 0 0 0 0 0 0 0 0 0 42918 99426 11516 0 84206 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 835 0 0 0 0 0 2312 0 6132 0 0 0 530 0 0 0 0 0 0 0 47097 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 5836 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27609 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 9132 0 0 0 2685 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7048 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 269 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6412 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 2751051
btime 1330237572
processes 2407
procs_running 1
procs_blocked 0
softirq 641387 215 343387 12 699 10 10 61002 2682 804 232566

/proc/%d/stat

记录了某个进程的CPU和Memory的信息。其中Memory的单位是

>adb shell cat /proc/2416/stat
2416 (test.simplechat) S 131 131 0 0 -1 4194624 1080685 0 138 0 17038 3175 0 0 20 0 32 0 927564 257974272[VSS, byte] 17879[RSS, page,should be 4k] 4294967295 1 1 0 0 0 0 4612 4096 34024 4294967295 0 0 17 0 0 0 0 0 0 51

/proc/%d/task

记录在某个进程下面各个线程的id, 每个线程会创建一个文件夹,在下面可以看到更多关于这个线程的信息。

>adb shell ls /proc/2416/task
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426

/proc/%d/statm
提供某个进城的memory信息,其单位是page

>adb shell cat /proc/2416/statm
47304 9139 4779 1 0 5643 0

VSS and RSS

VSS indicates how much virtual memory is associated with the process, Resident Set Size indicates how many physical pages are associated with the process.


VSS is generally meaningless on Android.  If I memory-map a 1MB file, VSS grows by 1MB, but I haven't used any resources (other than entries in a virtual mapping table).


RSS is partially meaningless on Android, because it doesn't identify pages shared between multiple processes.  If process A has an RSS of 2MB, and process B has an RSS of 2MB, it's possible that there are 4MB of physical pages occupied.  It's also possible that there are only 2MB of physical pages occupied.

PSS and USS

USS is the count of pages that are unique to that process.  PSS is RSS reduced by a percentage according to how many processes share the physical pages.  For example, if there are three processes sharing the same 6MB region, each process will adjust their RSS count by 6MB, but only add 2MB to their PSS.

Ref:

1. http://www.linuxhowtos.org/System/procstat.htm

2. top.c

3. http://homepages.cwi.nl/~aeb/linux/man2html/man5/proc.5.html

4. procrank

5. http://elinux.org/Android_Memory_Usage

6. http://hi.baidu.com/donghaozheng/blog/item/235da701ab70f60a1c95832e.html

原文地址:https://www.cnblogs.com/whyandinside/p/2368852.html