美文网首页
Android 之CPU监控命令

Android 之CPU监控命令

作者: PuHJ | 来源:发表于2019-10-10 19:59 被阅读0次

一、前言

此篇文章就是通过分析整个操作系统或者单个进程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大小上限

相关文章

网友评论

      本文标题:Android 之CPU监控命令

      本文链接:https://www.haomeiwen.com/subject/viuapctx.html