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

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

https://blog.csdn.net/weixin_34075268/article/details/92413101

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

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

今天被问到这个问题,发现答的不是很清楚。果然啊,天天用最多的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时间百分比。

比如下面一个程序:

将文件从磁盘的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的显示

其中可以很容易将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

原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/12180228.html

时间: 2024-07-29 18:21:06

【转帖】CPU状态信息us,sy,ni,id,wa,hi,si,st含义的相关文章

你不一定懂的cpu显示信息

在使用top命令的时候会看到这么一行: 里面的各个值分别是什么意思呢? 今天被问到这个问题,发现答的不是很清楚.果然啊,天天用最多的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显示信息详解

日常我们在使用top命令的时候会看到这么一行: 里面的各个值分别是什么意思呢? 今天被问到这个问题,发现答的不是很清楚.果然啊,天天用最多的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 n

aix 查看内存,CPU 配置信息

内存lsattr -El mem0cpu lsdev -C |grep procCPU的信息lsattr -El proc0 #bootinfo -r查看物理内存 使用命令#  lsdev -Cc memory查看配置的物理内存设备,下面为其输出示例:  mem0 Available 00-00 Memory   L2cache0 Available 00-00 L2 Cache 再使用命令# lsattr -El mem0输出如下  size 512 Total amount of physi

shell脚本:收集系统和各种服务的状态信息

脚本功能:收集系统和各种服务的状态信息 ------------------ #!/bin/bash # get system and services status # by colin # revision on 2015-10-15 ######################################## # 功能说明:该脚本用于收集系统和各种服务的状态信息 # # 部署脚本时,加参数请注意参数顺序,否则会影响传上去的数据解析结果 #+ 命令:sh system_status_v3

使用shell和python分别实现简单菜单功能--打印当前系统状态信息

哥哥我又回来啦,哈哈··好久没来写博客了,现在慢慢把以前的都补上!最近在学习python,所以会更新一些学习中遇到的问题. 今天的内容是用python实现之前学习shell的时候写的一个简单脚本的功能:选择对应的菜单项,打印当前系统的状态信息. 不罗嗦了,上代码: #!/bin/bash   User () {        echo "用户登录记录:"        echo "`last`" }   Ifcfg () {         echo "本

更改CPU厂商信息

更改第三方手机检测到的CPU厂商型号,在kernel\arch\arm\mach-msm下面对应的Board-*.c文件里更改,比如我们是8226的CPU,就要在Board-8226.c里将DT_MACHINE_START(MSM8226_DT, "Qualcomm MSM 8226 (Flattened Device Tree)")  这里的8226改成客户指定的型号,比如要改成8926,就要这么改: DT_MACHINE_START(MSM8226_DT, "Qualco

Nginx状态信息(status)配置及信息详解

Nginx状态信息(status)配置及信息详解 nginx与php-fpm一样内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有帮助.为了后续的zabbix监控,我们需要先了解一下nginx的状态页. Nginx状态信息(status)介绍 Nginx软件在编译时又一个with-http_stub_status_module模块,这个模块功能是记录Nginx的基本访问状态信息,让使用者了解Nginx的工作状态.要想使用状态模块,在编译时必须增加--with-http_stub

ZooKeeper 状态信息Stat的属性说明

运行%ZK_HOME%/bin目录下的zkCli.sh(zkCli.cmd),使用get命令可以获取指定ZNode的数据内容和属性信息.例如: [zk: localhost:2181(CONNECTED) 12] get /zk-huey 000 cZxid = 0x20000007c ctime = Wed Mar 04 22:01:46 CST 2015 mZxid = 0x20000007c mtime = Wed Mar 04 22:01:46 CST 2015 pZxid = 0x20

Ngingx常用配置(二)虚拟主机,访问控制,认证和状态信息

环境概况: IP地址 服务器状态 简述 192.168.180.4 Nginx服务器 192.168.180.23 client 192.168.171.231 client 具体测试步骤如下: (一)基于虚拟主机的配置.是通过不同的域名来区分提供的web服务器的主机,server_name指令主要用于配置基于域名的虚拟主机 1,首先在192.168.180.23修改/etc/hosts文件 [[email protected] haproxy]# vim /etc/hosts 192.168.