CPU的各指标计算方法(参考vmstat和mpstat)

CPU的基本信息来自于文件"/proc/stat",所以对该文件的CPU部分进行简单的说明,只截取了其中的三行

cpu  754248101 201023 833006927 34020625757 9582415 41335 57475553 0 0
cpu0 25673365 26490 45242705 481091169 1905819 0 89737 0 0
cpu1 11349582 4034 19951827 522625729 235574 0 64068 0 0

cpu:表示总的cpu信息,cpu0、cpu1表示单个cpu的信息

cpu_user:用户态的时间

cpu_nice:用户态的低优先级(nice)时间,cpu_nice和cpu_user都是属于用户态的

cpu_sys:系统态时间

cpu_idle:空闲时间

cpu_iowait:当CPU空闲的时候有IO请求的时间

cpu_hardirq:硬中断时间

cpu_softirq:软中断时间,cpu_softirq、cpu_hardirq和cpu_sys都是属于系统态的

//下面这三个是与虚拟机有关的,如果不存在虚拟机,应该都为0,由于我的环境没有虚拟机,所以对这几个参数没有详细去了解

cpu_steal:这个的意思好像是虚拟的处理器需要等待实际的cpu的延迟时间,当存在多个虚拟机时,可能要花一定的时间等待实际的cpu运行其他的虚拟机(该指标不是太清楚)

cpu_guest:cpu运行虚拟处理器花费的时间

cpu_guest_nice:cpu运行低优先级(nice)的guest花费的时间

下面是mpstat的简单的打印信息,分析这些域的计算方法,这些域的大致方法是通过两次读取"/proc/stat",计算两次的差值

CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle

总的时间为tot_jiffies = cpu_user + cpu_nice + cpu_sys + cpu_idle + cpu_iowait + cpu_hardirq + cpu_steal + cpu_softirq;//这里没有计算cpu_guest/cpu_guest_nice是因为cpu_user/cpu_nice包含了他们

%usr:两次读取的cpu_user的差值除以两次读取的tot_jiffies的差值

%nice:两次读取的cpu_nice的差值除以两次读取的tot_jiffies的差值

%sys:两次读取的cpu_sys的差值除以两次读取的tot_jiffies的差值,该指标有时候会将cpu_softirq和cpu_hardirq都计算进来

%iowait:两次读取的cpu_iowait的差值除以两次读取的tot_jiffies的差值

%irq:两次读取的cpu_hardirq的差值除以两次读取的tot_jiffies的差值

%soft:两次读取的cpu_softirq的差值除以两次读取的tot_jiffies的差值

%steal:两次读取的cpu_steal的差值除以两次读取的tot_jiffies的差值

%guest:两次读取的cpu_guest的差值除以两次读取的tot_jiffies的差值

%idle:两次读取的cpu_idle的差值除以两次读取的tot_jiffies的差值

在统计cpu信息时,还有一个常统计的信息是中断总数intr,该信息也在/proc/stat中,只截取了第一个值,表示所有cpu的总的中断数

intr 289854255844

该值得打印信息是使用mpstat -I SUM,

14时19分53秒  CPU    intr/s
14时19分53秒  all  51507.13

intr/s:两次读取的intr的差值除以两次读取的时间间隔。

 

其他的一些说明:

cpu_user和cpu_nice都是处于用户态的时间,cpu_sys和cpu_hardirq、cpu_softirq都是处于系统态的时间

iowait:Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.

关于iowait,根据vmstat的man手册,可以看到,该指标指的是当cpu空闲的时候存在io请求的时间,所以如果该指标如果比较高,即不能说明cpu不能工作,也不能说明I/O有瓶颈,该指标如果升高很难说明什么问题,应该综合查看当前的io情况和cpu情况,通过await和aqu_sz等指标确定是否存在I/O瓶颈问题。

你可能感兴趣的:(linux资源信息)