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瓶颈问题。