Android 之CPU监控命令

一、前言

此篇文章就是通过分析整个操作系统或者单个进程CPU,来监控应用的性能。而在Linux世界中,一切对象皆文件。进程执行的时候,也会将相关的信息保存在约定好的文件中,所以熟悉这些文件是必要的。

二、CPU数量

系统的CPU数量存放在/sys/devices/system/cpu/possible中,如下输出共有0至3四个CPU。

root@p212:/proc # cat /sys/devices/system/cpu/possible
0-3

三、CPU频率

利用上面的命令可以知道CPU个数,下面可以查看每个CPU对应的CPU频率。
/sys/devices/system/cpu/【cpu0】/cpufreq/cpuinfo_max_freq

root@p212:/proc # cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq

1512000

四、系统负载

/proc/loadavg文件中存放系统平均负载相关信息。

127|root@p212:/ # cat /proc/loadavg
2.86 2.67 2.68 3/530 15713

  • 前三个数字是1、5、15分钟内的平均进程数
  • 第四个,分子是正在运行的进程数,分母是进程总数
  • 第五个,是最近运行的进程ID号

五、CPU调度

/proc/[pid]/sched,pid为进程号

130|root@p212:/ # cat /proc/4065/sched
system_server (4065, #threads: 83)
-------------------------------------------------------------------
se.exec_start                                :     118617735.634033
// 虚拟运行时间,cfs公平调度实体下使用
se.vruntime                                  :       6176888.422605
// 总共运行时间
se.sum_exec_runtime                          :         11438.649001
se.statistics.wait_start                     :             0.000000
se.statistics.sleep_start                    :     118617735.634033
se.statistics.block_start                    :             0.000000
se.statistics.sleep_max                      :         58588.327902
se.statistics.block_max                      :           175.110499
se.statistics.exec_max                       :            10.003042
se.statistics.slice_max                      :             8.983541
se.statistics.wait_max                       :            34.791083
se.statistics.wait_sum                       :          9057.778515
se.statistics.wait_count                     :                64578
// io 等待时间
se.statistics.iowait_sum                     :          5837.190865
// io 等待次数
se.statistics.iowait_count                   :                 1167
se.nr_migrations                             :                 5096
se.statistics.nr_migrations_cold             :                    0
se.statistics.nr_failed_migrations_affine    :                    0
se.statistics.nr_failed_migrations_running   :                 3800
se.statistics.nr_failed_migrations_hot       :                  766
se.statistics.nr_forced_migrations           :                    0
se.statistics.nr_wakeups                     :                54333
se.statistics.nr_wakeups_sync                :                   29
se.statistics.nr_wakeups_migrate             :                  959
se.statistics.nr_wakeups_local               :                25610
se.statistics.nr_wakeups_remote              :                28723
se.statistics.nr_wakeups_affine              :                  929
se.statistics.nr_wakeups_affine_attempts     :                13888
se.statistics.nr_wakeups_passive             :                    0
se.statistics.nr_wakeups_idle                :                    0
avg_atom                                     :             0.200889
avg_per_cpu                                  :             2.244632
// 上下文切换次数
nr_switches                                  :                56940
// 主动上下文切换次数,比如获取不到资源,主动放弃CPU
nr_voluntary_switches                        :                54309
// 上被动下文切换次数,如果被动上下文切换次数过高,说明有大量线程抢占CPU资源
nr_involuntary_switches                      :                 2631
se.load.weight                               :                 1586
se.avg.runnable_avg_sum                      :                  973
se.avg.runnable_avg_period                   :                47365
se.avg.load_avg_contrib                      :                   32
se.avg.decay_count                           :            113122688
// struct_task是哪种任务,如先进先出,后台等
policy                                       :                    0
// 优先级
prio                                         :                  118
clock-delta                                  :                  125

六、/proc/stat

查看系统整体情况

130|root@p212:/ # cat /proc/stat
// 分别是:user time、nice time、system time、 idle time、 iowait、irq、softirq
cpu  3257003 31974 2667163 8808597 6822 14 12331 0 0 0
cpu0 1347460 11169 1401885 8702614 5321 0 10851 0 0 0
cpu1 1525121 10689 1002194 81153 2 7 594 0 0 0
cpu2 382045 5510 261340 15158 0 7 886 0 0 0
intr 241202651 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 54961687 0 0 0 0 7214039 0 0 12021142 0 817162 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 56275 152858 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7214037 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27157318 0 13596066 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 293 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 2369775 218897 0 0 0 0 0 0 0 168729 0 0 0 0 0
ctxt 531798377
btime 1420070402
processes 95535
procs_running 4
procs_blocked 0
softirq 67877118 94 25753607 4296 1442197 94 94 315020 15626967 150 24734599

CPUn:是对应的CPU的信息。(时间单位jiffies)
  • user time : 用户态时间
  • nice time : 低优先级下用户态执行时间
  • system time : 内核态时间
  • idle time : 系统空闲时间
  • iowait time: IO等待时间
  • irq : 硬件中断次数
  • softirq : 软中断次数
intr :系统中断情况
ctxt :系统上下文切换次数
btime :系统启动时间
processes :系统创建的进程数量
procs_running :当前处于Runnable状态的进程个数
procs_blocked :当前处于等待I/O完成的进程个数
softirq :系统软中断情况

七、proc/[pid]>/stat

查看某一个进程的stat,也有/proc/[pid]/task/[tid]/stat命令,这个是查看PID进程下的TID的stat。

130|root@p212:/ # cat /proc/4065/stat
4065 (system_server) S 3753 3753 0 0 -1 1077936448    (1~9)
763146 0 859 0 321121 178088 0 0 18    (10~18)
-2 83 0 1080 1707184128 15150 18446744073709551615  (18~25)
2863460352 2863478136 4289341088 4289338152 4148691404 0 4612 0 38136 18446744073709551615 0 0 17 1 0 0 0 0 0 2863484120 2863484928 2864824320 4289342379 4289342455 4289342455 4289343456 0

  • 1: pid: 进程ID.
  • 2: comm: 进程名
  • 3: state: 进程状态
  • 4: ppid: 父进程ID
  • 5: pgrp:进程组ID
  • 6: session:进程会话组ID
  • 7: tty_nr:当前进程的tty终点设备号
  • 8: tpgid:控制进程终端的前台进程号
  • 9: flags:进程标识位
  • 10: minflt: 次要缺页中断的次数,即无需从磁盘加载内存页. 比如COW和匿名页
  • 11: cminflt:当前进程等待子进程的minflt
  • 12: majflt:主要缺页中断的次数,需要从磁盘加载内存页. 比如map文件
  • 13: majflt:当前进程等待子进程的majflt
  • 14: utime: 该进程处于用户态的时间
  • 15: stime: 该进程处于内核态的时间
  • 16: cutime:当前进程等待子进程的utime
  • 17: cstime: 当前进程等待子进程的stime
  • 18: priority: 进程优先级
  • 19: nice: nice值,取值范围[19, -20]
  • 20: num_threads: 线程个数
  • 21: itrealvalue: 该字段已废弃,恒等于0
  • 22: starttime:自系统启动后的进程创建时间
  • 23: vsize:进程的虚拟内存大小,单位为bytes
  • 24: rss: 进程独占内存+共享库,单位pages
  • 25: rsslim: rss大小上限
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343