你不一定懂的cpu显示信息

在使用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


本文出自 “LINUX Super梦” 博客,请务必保留此出处http://215687833.blog.51cto.com/6724358/1787142

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋值、copy和deepcopy之前,我们还是要花一点时间来了解一下python内存中变量的存储情况。 在高级语言中,变量是对内存及其地址的抽象。对于python而言,python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身。 引用语义与值语
我们在 线程同步机制(一)--Synchronized和Lock简要介绍 中学习了同步和临界区的概念,并且讨论了多个并发任务共享一个资源时的同步情况。访问共享资源的代码块叫临界区。 我们在 线程同步机制(一)--Synchronized和Lock简要介绍 中学习了一下内容: synchronized关键字 Lock接口及其实现类,如ReentrantLock,ReentrantReadWriteLock.ReadLock和ReentrantReadWriteLock.WriteLock 本章我们将学习如何
一、PXE 简介 PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由
通过前面的文章,相信大家对Azure有了一个基础的认识,接下来,我们再来看下作为企业,选择公有云服务最重要的因素之一 价格。我们都知道所谓公有云,就是要让IT资源变成我们生活中类似于水电气的资源,按需使用,按时计费。说得明白点就是让IT的开销都花在真正的需求上面, 并且要让公有云的资源消耗尽可能的贴合需求,这样才能够尽可能的达到公有云的效果。 所以不难看出,选择合适的配置、对应合适的需求、再有较高质量的服务和价格,是公有云非常具体的综合能力体现。这里我们还是来看一个例子,中等性能的Linux虚拟机(A3
嗨,各位好。 相信各位过来点开的时候会鄙视一句“这厮,又来搞山石了”,哈哈没错,这次确实又来了,不过这次带了点排错的心得过来,希望给未来在常见的配置过程当中,不知道怎么排错时候有些帮助。 说句真心话,山石(hillstone)确实挺好用的,不行你可以试试!! 好了,废话少说。直接上菜 ipsec的拓扑图,我临时画了一个,目的希望各位能有图看到,不然各位心里冒出千万个草泥马“NO picture NO bb”。 (这万恶的水印)无关紧要,今天的主题在俩台firewall上面。此图ipsec配置模式为tunn
我在使用Elasticsearch进行search查询的过程中,出现了 Result window is too large 问题。 这里简单做一个报错复现: In[1]:importrequestsIn[2]:requests.get('http://127.0.0.1:9200/cmdb-now/_search?page=1size=10000000').json()Out[2]:{u'error':{u'failed_shards':[{u'index':u'cmdb-now',u'node':u'
一般大家都是使用账号和密码远程SSH登录管理服务器。但SSH账号和密码很容易泄露,或者经常遭遇暴力破解。咨询过前同事赛赛,他们目前使用了谷歌身份验证器。查看了谷歌身份验证器的 github网址 和其它网上文档,重新整理归纳。 谷歌身份验证器生成的是动态验证码,默认30秒更新。修改配置,SSH登录必须在输入密码之前输入动态验证码。即使账号和密码泄露,验证码输入错误,仍然无法登录。苹果或者安卓手机端可以安装身份验证器App读取验证码。 1.禁用并关闭selinux sed-i's/SELINUX=enforc
在以AWS、Google、阿里等为代表的公有云发展的同时,很多大型企业出于数据安全性、系统稳定性、软硬件自主权、对自主可控以及TCO低的考虑,更加倾向于建设企业私有云来承载内部业务信息系统的运行。 构建企业私有云并非是一蹴而就的,正如Gartner的副总裁Tom Bittman所述“部署私有云并不是简单地对硬件进行采购,而是一场革新”。对于企业私有云而言,其建设同样应遵循信息系统建设的通用方法,即事先分析 规划、事中落地实现以及事后运维管理.本文从企业私有云建设需求分析,企业私有云建设要点以及企业私有云的

Python实现MySQL DBA小工具一例 - 2016-06-13 17:06:38

我们知道MySQL所有的运行状态统计信息都能从“show global status”语句的结果集中查看,该结果集保存的是从MySQL启动到当前时间之间各状态值的“总数”,对我们的分析不友好。在我们日常维护和优化中,我们需要持续的跟踪某些状态值的的变化(增量或者是平均值);或者是在调整某些参数后,观察某些状态值的变化是否符合我们预期等等。 基于以上这些需求,作者用Python实现了一个小工具。其实也从“MySQL Workbench”这个图形化工具中获得了一点启发,想到做一个命令行下类似的功能。MySQL
最近在Youtube看Docker视频的过程中不幸看到了Mesos的介绍,然后就有一种一见如故的感觉,最终根据mesosphere官网的文档在IBM的Bluemix虚拟机上搭建了基于ZooKeeper+ Mesos + Marathon的平台。 搭建之前先简单了解下各个组件是做什么的。(来自wikipedia及其他网络) ZooKeeper:Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务