问题:
用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数目;

参考博文:
https://blog.csdn.net/zjjyliuweijie/article/details/7048973

转载于:https://blog.51cto.com/linux10000/2117554

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

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

    问题: 用vmstat,top,和ps aux三个命令查看进程对cpu的占用率,数值差异很大. 例: 用 vmstat 查看系统cpu空闲率, id是cpu的空闲率,可以看出,空闲率一直在73%以上 ...

  2. Linux下如何查看高CPU占用率线程

    转于:http://www.cnblogs.com/lidabo/p/4738113.html 目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidst ...

  3. Linux/Android之sar查看IO/CPU占用率

    # sudo apt install sar1.查看内存利用率信息 # sar -r2.CPU 利用率信息 # sar -u3.交换空间利用率信息 # sar -S4.内核表统计信息 # sar -v ...

  4. linux查看cpu占用率的方法:

    linux查看cpu占用率的方法: 一.查看单核CPU占用率,终端上输入"top". 二.查看多核CPU占用率,终端上输入"top",进入界面再输入" ...

  5. cpu占用率超过1000%的解决办法

    最近oracle所在的服务器数据库有点不稳定,经常连接不上了,挂了. 使用root用户登录oraclelinux 后,执行top命令发现cpu占用率有个进程超过1000%,你占用100%我也能忍,超过 ...

  6. windows服务器system进程cpu占用率高解决方案(ntoskrnl.exe)

    之前给客户服务器部署过服务器监控程序,今天收到邮件告警提醒CPU过高,进入监控发现System进程突然升高,这个是系统进程,只查看进程cpu占用率没用,需要去查看System进程里的线程,具体是由那个 ...

  7. ps aux 查看进程信息

    [root@localhost Desktop]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0 ...

  8. 如何top命令查看进程信息和cpu占用率分析

    top 通过top命令查看进程信息 通过adb shell top -h查看其使用方法 130|root@sp9820e_1h10:/ # top -h Usage: top [ -m max_pro ...

  9. java线程 cpu占用率_多线程程序 怎样查看每个线程的cpu占用

    可以用下面的命令将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu 这个命令首先指定参数'H',显示线程相关的 ...

最新文章

  1. 点击通知栏后打开Activity,并传参
  2. 那些年我们一起玩DIY总结出的经验——网络篇
  3. android 保存ArrayListObject至SharedPreferences
  4. 决胜大数据时代:HadoopYarnSpark企业级最佳实践(3天)
  5. 【Go API 开发实战 3】API 流程和代码结构
  6. Nginx 禁止访问某个目录或文件的设置方法
  7. Java ObjectOutputStream writeDouble()方法与示例
  8. 1.通俗解释分布式系统
  9. linux学习笔记1(第一本笔记)
  10. Hexo博客开发之——theme主题备份上传失败
  11. layui图标显示不正常,显示成方块
  12. IDEA中enter键无法换行
  13. 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场(图像处理)
  14. 【二次开发教程】Ai-WB2系列的eclipes搭建环境教程
  15. 台式电脑键盘错乱会出现计算机模式怎么办,键盘错乱怎么修复错位(台式电脑键盘按键错乱)...
  16. BI案例:BI在连锁零售业应用(ZT)【转】
  17. 软件开发常用工具汇总百度云网盘
  18. 精准送达目标客户——基于极光平台优化Android通知
  19. 中国市场迎来AR-HUD元年
  20. matlab 函数pdf怎么用_PDF转PPT怎么转?就用这个转换神器!

热门文章

  1. php 实现对称加密算法,PHP实现简单的对称加密和解密方法
  2. linux开机启动遇到grub启动_Linux如何跳过grub启动
  3. linux安装教程6.3,CentOS 6.3安装教程(详细图解)
  4. 测试一款CSDN免费下载软件
  5. 今天下午2:00,RT-Thread与智能车竞赛概况
  6. 三关节机械臂控制需求说明压缩文件中的相关文档说明
  7. 天体摇摆仪的工作原理
  8. 第十五届全国大学生智能汽车竞赛华北赛区比赛
  9. linux在生信的作用,【生信笔记】右键菜单打开WSL功能方法简介
  10. 服务器负载不高 响应慢_负载均衡有哪几大类别?