当前位置: 首页 > news >正文

CPU状态信息us,sy,ni,id,wa,hi,si,st含义

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

 

Linux中在使用top命令的时候会看到这么一行:

Image(20)

里面的各个值分别是什么意思呢?

今天被问到这个问题,发现答的不是很清楚。果然啊,天天用最多的top命令都还没摸透。。。惭愧。。。于是就查了些资料:

官方解释

Cpu(s)表示的是cpu信息。各个值的意思是:

us: user cpu time (or) % CPU time spent in user space

sy: system cpu time (or) % CPU time spent in kernel space

ni: user nice cpu time (or) % CPU time spent on low priority processes

id: idle cpu time (or) % CPU time spent idle

wa: io wait cpu time (or) % CPU time spent in wait (on disk)

hi: hardware irq (or) % CPU time spent servicing/handling hardware interrupts

si: software irq (or) % CPU time spent servicing/handling software interrupts

st: steal time - - % CPU time in involuntary wait by virtual cpu while hypervisor is servicing another processor (or) % CPU time stolen from a virtual machine

 

翻译一下:

us:用户态使用的cpu时间比

sy:系统态使用的cpu时间比

ni:用做nice加权的进程分配的用户态cpu时间比

id:空闲的cpu时间比

wa:cpu等待磁盘写入完成时间

hi:硬中断消耗时间

si:软中断消耗时间

st:虚拟机偷取时间

 

好了,如果说列出上面的条条框框说我懂了,那真是自欺欺人了。下面是我自己的理解

首先这个百分比是怎么算出来的呢?

比如一秒内有100个cpu时间片,这个cpu时间片就是cpu工作的最小单位。那么这100个cpu时间片在不同的区域和目的进行操作使用,就代表这个区域所占用的cpu时间比。也就是这里得出的cpu时间百分比。

比如下面一个程序:

Image(21)

将文件从磁盘的src位置拷贝到磁盘的dst位置。文件会从src先读取进入到内核空间,然后再读取到用户空间,然后拷贝数据到用户空间的buf上,再通过用户空间,内核空间,数据才到磁盘的dst上。

 

所以从上面这个程序来看,cpu消耗在kernel space的时候就是sy(系统态使用的cpu百分比),cpu消耗在user space的时候就是us(用户态使用的cpu百分比)。

好了,下面说说hi和si

如果程序都没什么问题,那么是没有hi和si的,但是实际上有个硬中断和软中断的概念。比如硬中断,cpu在执行程序的时候,突然外设硬件(比如硬盘出现问题了)机器需要立刻通知cpu进行现场保存工作。这个时候会cpu会出现上下文切换。就是cpu会有一部分时间会被硬中断占用了,这个时间就是hi。相类似,si是软中断的cpu占用时间,软中断是由软件的指令方式触发的。

相关软中断和硬中断的概念可以参考:

http://blog.csdn.net/pxz_002/article/details/7327668

下面是ni

ni是nice的意思,nice是什么呢,每个linux进程都有个优先级,优先级高的进程有优先执行的权利,这个叫做pri。进程除了优先级外,还有个优先级的修正值。即比如你原先的优先级是20,然后修正值为-2,那么你最后的进程优先级为18。这个修正值就叫做进程的nice值。

 

那么nice是一个进程的优先级修正值,为什么会占用cpu时间呢?

ni是指用做nice加权的进程使用的用户态cpu时间比,我的理解就是一个进程的所谓修正值就意味着多分配一些cpu时间给这个进程的用户态,这个中间所多分配的cpu时间就是我们这里的ni。(这个理解没啥把握,如果有错误麻烦帮忙指出下)

下面是wa

wa指的是CPU等待磁盘写入完成的时间,就是说前提是要进行IO操作,在进行IO操作的时候,CPU等待时间。比如上面那个程序,最后一步,从系统空间到dst硬盘空间的时候,如果程序是阻塞的,那么这个时候cpu就要等待数据写入磁盘才能完成写操作了。所以这个时候cpu等待的时间就是wa。

所以如果一台机器看到wa特别高,那么一般说明是磁盘IO出现问题,可以使用iostat等命令继续进行详细分析。

下面是st

st的名字很生动,偷取。。。是专门对虚拟机来说的,一台物理是可以虚拟化出几台虚拟机的。在其中一台虚拟机上用top查看发现st不为0,就说明本来有这么多个cpu时间是安排给我这个虚拟机的,但是由于某种虚拟技术,把这个cpu时间分配给了其他的虚拟机了。这就叫做偷取。

id

剩下的id就是除了上面那么多cpu处理上下文以外的cpu时间片。当然在这些时间片上,cpu是空闲的。

top的所有这些cpu时间应该是相加为100%的。

dstat

题外话,有个dstat命令也是可以查看cpu的信息的。下图就是dstat -c的显示

Image(22)

其中可以很容易将usr和us,sys和sy,idl和id,wai和wa,hig和hi,siq和si对应起来

但是可以观察到dstat是没有st,ni的统计的,而且它的所有部分加起来总和可能没有100,这就说明dstat实际是没有对st,ni做cpu统计的。使用的时候要注意下这个。

参考文章:

http://hi.baidu.com/higkoo/item/70600834426247483075a1df

http://blog.csdn.net/codestinity/article/details/7496962

http://book.51cto.com/art/200812/99435.htm

http://unix.stackexchange.com/questions/18918/in-linux-top-command-what-are-us-sy-ni-id-wa-hi-si-and-st-for-cpu-usage

转载于:https://my.oschina.net/u/3805464/blog/1812349

相关文章:

  • QuickBI助你成为分析师——计算字段功能
  • 基于ASP.NET MVC 微信网页登录授权(scope为snsapi_base) 流程 上 获取OPENID
  • PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
  • composer移除依赖包
  • 在Linux,误删磁盘分区怎么恢复呢【转】
  • 纯html页面中js如何获得项目路径
  • Confluence 6 后台中的选择站点首页
  • 算法18-----判断是否存在符合条件的元素【list】
  • 邪恶的三位一体:机器学习、黑暗网络和网络犯罪
  • sql查询本周,本月数据
  • 生产环境Vmware新增硬盘扩展VG并新建文件系统
  • 通过7个函数解密区块链(附代码)
  • php面试题三
  • CISP-PTE注册信息安全专业人员渗透测试工程师知识体系大纲
  • kafa单机版环境搭建
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2018一半小结一波
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES6 ...操作符
  • java正则表式的使用
  • jquery ajax学习笔记
  • maya建模与骨骼动画快速实现人工鱼
  • Object.assign方法不能实现深复制
  • 初识 webpack
  • 搞机器学习要哪些技能
  • 讲清楚之javascript作用域
  • 探索 JS 中的模块化
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微服务框架lagom
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (LeetCode) T14. Longest Common Prefix
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (九十四)函数和二维数组
  • (七)Knockout 创建自定义绑定
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (原創) 未来三学期想要修的课 (日記)
  • *** 2003
  • .gitignore
  • .Net mvc总结
  • .net 验证控件和javaScript的冲突问题
  • .NET学习教程二——.net基础定义+VS常用设置
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @Autowired和@Resource装配
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [dts]Device Tree机制