美文网首页
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