`
jxstar
  • 浏览: 36950 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于vmstat,top,ps aux查看的cpu占用率不一致的问题

阅读更多

转载:关于vmstat,top,ps aux查看的cpu占用率不一致的问题
问题:
用vmstat,top,和ps aux三个命令查看进程对cpu的占用率,数值差异很大。

例:
用 vmstat 查看系统cpu空闲率, id是cpu的空闲率,可以看出,空闲率一直在73%以上
用 ps aux 统计两个compress进程的cpu占用率,长时间恒定在15.5%和28.9%
用 top统计两个compress进程的cpu占用率,可以看出是一个动态变化的过程
(命令执行结果后面有显示)

这三个命令查出的cpu利用率不统一
首先,ps aux中两个compress进程占用cpu 15.5%+28.9%>40%,再加上其它进程,为
何vmstat查看cpu空闲率id还能一直大于73%
其次,top命令显示的进程compress的cpu占用率和ps显示的数值差别很大,ps的
cpu占用率雷打不动,一直是恒定值,
top的比较动态, 难道ps aux显示的进程cpu占用率不可靠?
最后,这三个命令查出的cpu占用率相互之间均不统一,用哪一个更可靠?例如输入如下命令,粗体字是cpu占用率

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r   b swpd free buff   cache si so bi bo in cs us sy id wa
0   0 432 802660   28724 5747324 0 0 204 770 0     0   6   3 90   2
3   0 432 799196   28724 5747392 0 0     0 152 1455 681   2   2 96   0
0   0 432 802420   28724 5747460 0 0     0 480 1599   1892 10   8 82 0
0   0 432 802292   28724 5747664 0 0     0 440 1859   6179 14 13 73 0
2   0 432 797636   28724 5752084 0 0     0 240 1403   3419   8   7 85   0
1   0 432 798732   28724 5751268 0 0     0 448 1506   4608 10   8 81   0
2   0 432 797924   28724 5752084 0 0     0 192 1752   4332 11 10 79   0
0   0 432 802076   28724 5747936 0 0     0 280 1705   1527 14   6 79 0

$ps aux | grep compress
USER    PID %CPU %MEM VSZ   RSS TTY    STAT START TIME COMMAND
img    6569 15.5   0.2 36716 16540 ?    S Aug12 230:57 ./bin/compress 8014
img    6570 28.9   0.2 54592 22524 ?    S Aug12 430:28 ./bin/compress 8004 

$top | grep compress
PID USER    PR   NI   VIRT   RES   SHR S %CPU %MEM TIME+   COMMAND                                                      
6569 img    16 0 40956   20m 6632 R 10.7   0.3 231:10.12 compress                                                      
6570 img    16 0 54592   21m 2456 S 20.3   0.3 430:54.32 compress                                                      
6569 img    17 0 36740   16m 2456 S 10.3   0.2 231:10.43 compress                                                      
6570 img    16 0 54592   21m 2456 R 58.9   0.3 430:56.09 compress                                                      
6569 img    16 0 36716   16m 2456 R 53.9   0.2 231:12.05 compress                                                      
6570 img    16 0 58444   24m 4752 R 69.9   0.3 430:58.19 compress                                                      
6569 img    16 0 36716   16m 2456 S 60.2   0.2 231:13.86 compress                                                      
6570 img    16 0 54592   21m 2456 S 52.6   0.3 430:59.77 compress                                                      
6569 img    15 0 36716   16m 2456 S 45.3   0.2 231:15.22 compress                                                       

大概看了些源码,补充一下:
top,ps,vmstat都是根据系统的proc文件进行计算的,其中vmstat,top都使用了/proc/stat文件,而ps,top也使用了/proc/*/stat文件进行计算。

1.vmstat对于cpu idle的计算方式比较复杂,但是显示的为平均值,即使用cpu使用时间片的差值/时间间隔/cpu个数(为物理cpu数目*cpu核心数),其中时间间隔为vmstat后加的参数,如vmstat 10就为10s内的平均cpu 占用率;

2.ps计算的为每个进程的cpu占用时间,使用的为/proc/*/stat文件,其中*为进程号,计算方式为使用cpu总的时间片数/Hertz,目前确认为对于每个物理cpu的占用比率,因此在双核机器上显示的数值需要除以核心数2;

3.top使用的是/proc/stat计算上面显示的cpu占用,使用/proc/*/stat计算每个进程占用的时间。但是计算的方式有所不同,代码较为复杂,但是目前确认为默认显示为Irix模式,即为相对于单个cpu core的占用的时间,如双核机器需要将该数值除以2*2计算,通过 shift+i可以进行切换;

通过上述说明可以解释珺方发现的问题:
问题1:首先,ps aux中两个compress进程占用cpu 15.5%+28.9%>40%,再加上其它进程,为何vmstat查看cpu空闲率id还能一直大于73%
ps的cpu占用率需要除以双核cpu数目为2,因此实际占用为(15.5%+28.9% )/2=22.2% ,也就约等于100%-73%;

问题2:其次,top命令显示的进程compress的cpu占用率和ps显示的数值差别很大,ps的cpu占用率雷打不动,一直是恒定值,top的比较动态, 难道ps aux显示的进程cpu占用率不可靠?
ps和top相差的数值为2倍关系,因此显示的占用率相差很大,同时变化率也会较大;

问题3:最后,这三个命令查出的cpu占用率相互之间均不统一,用哪一个更可靠?例如输入如下命令,粗体字是cpu占用率
这三个命令的占用率是统一的,按照如下公式进行计算时数据是一致的:
vmstat 的100%-idle == ps的cpu占用/cpu核心数 == top的cpu占用/cpu核心数/物理cpu数目;

分享到:
评论

相关推荐

    liunx后台vmstat命令

    这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

    Linux系统命令top,ps,kill,free,vmstat等命令的源码

    Linux系统命令源码包,包含Top,Free,ps,kill等命令

    AIX VMSTAT的用法

    VMSTAT 用法 。

    vmstat查看系统负载

    通过该命令可以查看系统负载,指导用户做好系统维护

    Android Vmstat详解及问题快速定位

    Vmstat是android toolbox提供的众多工具中的一个,源码位于 /system/core/toolbox/下的vmstat.c。其实现原理是在一定时间内(可通过-d命令设置,默认是1秒),读取并分析系统/proc文件系统下的 meminfo、stat和vmstat...

    LoadRunner监控到的Linux服务器CPU的一些主要指标说明.pdf

    CPU Utilization 是 CPU 的使用率,表示 CPU 在某一时间内的使用百分比。一般来说,CPU Utilization 高于 75% 就认为是比较高的。 二、 CPU 状态 在任意时间内,CPU 有 7 个状态: 1. idle:表示 CPU 闲置并等待...

    vmstat命令详解

    vmstat 命令是 Linux 系统中用于显示系统当前的进程、内存、交换空间、IO 设备、系统和 CPU 使用情况的命令。下面是 vmstat 命令的详细解释: procs * r: 等待运行的进程数 * b: 处在非中断睡眠状态的进程数 * w: ...

    AIX上的vmstat的报告输出解释和命令基本用法

    us表示用户模式下CPU的使用率,sy表示系统模式下CPU的使用率,id表示CPU的空闲率,wa表示等待I/O的CPU时间百分比。 命令基本用法 vmstat命令的基本用法如下: ``` vmstat [间隔时间] [采样次数] ``` 其中,间隔...

    iostat_vmstat_详解

    Linux在具有高稳定性、可靠性的同时,具有很好的可... 在Linux下有很多系统性能分析工具,比较常见的有top、free、ps、time、timex、uptime等。下文将介绍几个较为重要的性能分析工具vmstat、iostat和sar及其使用。

    sar 与vmstat命令.txt

    sar与vmstat命令简介 vmstat命令报告内核线程,虚拟内存、磁盘、陷阱、和CPU活动情况。 Kthr 线程活动情况 r 运行队列 b 等待队列

    vmstat详解.

    vmstat详解.

    vmstat源代码注释

    vmstat核心源代码注释,对理解Linux下的工具原理挺有帮助。

    Linux性能检查命令总结

    * top 命令:查看 CPU 的使用情况,包括进程的 CPU 使用率、进程的个数、CPU 的使用率等信息。 * ps 命令:查看进程的 CPU 使用率,包括进程的 ID 号、进程的名称、进程的 CPU 使用率等信息。 * sar -u 命令:查看 ...

    vmstat结果内容的解释

    vmstat结果内容的解释,和大家共享一下

    linux运维手册.docx

    vmstat 命令可以显示系统的 CPU 占用率、内存使用率、内存交换区使用率、文件系统占用率、进程占用资源等信息。 iostat 命令 iostat 命令是 Linux 运维中的重要命令,通过 iostat 命令,可以了解系统的当前状况,...

    linux vmstat命令详解和使用实例.docx

    在学习 vmstat 命令前,我们需要了解 Linux 系统中关于物理内存和虚拟内存相关信息。物理内存是系统硬件提供的内存大小,是真正的内存,而虚拟内存是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的...

    vmstat 命令详解

    vmstat 命令详解

    Linux内核分析:页回收导致的cpu load瞬间飙高的问题分析与思考.pdf

    在Linux系统中,有很多工具可以用来分析和解决cpu load瞬间飙高的问题,例如top命令、vmstat命令等。这些工具可以帮助我们快速地定位问题,并找到解决方案。 cpu load瞬间飙高的问题是非常重要的,需要我们认真地...

    IBM小型机日常维护手册

    1. CPU 占用率监控:使用 sar 命令来监控 CPU 的占用率,了解系统的 CPU 使用情况,并根据需要进行调整。 2. 内存使用情况监控:使用 vmstat 命令来监控内存的使用情况,了解系统的内存使用情况,并根据需要进行调整...

    AIX的vmstat命令详解.docx

    AIX的vmstat命令详解,有图有真相。

Global site tag (gtag.js) - Google Analytics