分析CPU消耗,讲白点,就是分析CPU的利用率,包括总的CPU利用率,每个CPU核的利用率和每个进程的CPU利用率。懂得这三种利用率的查询和分析,这一块就算搞定了。
一、总的CPU利用率
1、查询命令
vmstat
2、命令格式
vmstat 1 10 (每隔一秒显示一次系统的运行状况,共显示10次)
3、数据来源
/proc/stat
4、命令含义
vmstat命令用来获得UNIX系统有关进程、虚存、页面交换空间及CPU活动的信息。这些信息反映了系统的负载情况。vmstat首次运行时显示自系统启动开始的各项统计信息,之后运行vmstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
(vmstat第一条结果是从系统开始到现在的平均值,不是实时的值。以后的每个结果也是统计时间内的平均值,而不是实时值。)
5、字段含义

上图红色方框即是CPU各项指标的利用率情况。
us :在指定时间间隔内CPU在用户态的利用率,即用户进程消耗的CPU时间百分比。(=user+nice)
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于
50%,需要考虑优化用户的程序,比如算法等。
sy :在指定时间间隔内CPU在核心态的利用率,即内核进程消耗的CPU时间百分比。(=system+irq+soft)
sy 列显示了内核进程所花费的cpu时间的百分比。sy的值高时,说明系统内核消耗的CPU资源多。us+sy的参考值为<=
80%,如果us+sy 大于80%说明可能存在CPU资源不足。
id :在指定时间间隔内CPU空闲时间比,即CPU处于空闲状态时间百分比。(=idle, 不包括等待I/O)
id 列显示了cpu处在空闲状态的时间百分比。
wa :在指定时间间隔内CPU因为等待I/O而空闲的时间比,即IO等待消耗的CPU时间百分比。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为
30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
6、其他补充
这里user, irq, soft,idle是接下来要讲的命令 mpstat 的指标;nice指标请参考另一篇博文《进程优先级,进程nice值和%nice的解释》。
7、情景分析
如果CPU的sy和us值相加的百分比接近100%,或者运行队列(r) 中等待的进程数(b) 总是不等于 0,则该系统受限于CPU。
vmstat的输出哪些信息值得关注?
--proc r:运行的进程比较多,系统很繁忙
--IO bo:磁盘写的数据量稍大,如果大文件的写,10以内基本不用担心,如果是小文件2M以前基本正常
--CPU us:持续大于50,服务高峰期可以接受
--CPU wa:稍微有些同
--CPU id:持续小于50,服务高峰期可以接受
--proc r:运行的进程比较多,系统很繁忙
--IO bo:磁盘写的数据量稍大,如果大文件的写,10以内基本不用担心,如果是小文件2M以前基本正常
--CPU us:持续大于50,服务高峰期可以接受
--CPU wa:稍微有些同
--CPU id:持续小于50,服务高峰期可以接受
二、每个CPU核的利用率
1、查询命令
mpstat
2、命令格式
mpstat [-P {|ALL}] [interval [count]]
参数的含义如下:
参数 解释
-P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
interval 相邻的两次采样的间隔时间
count 采样的次数,count只能和delay一起使用
当没有参数时,mpstat显示自系统启动以后所有信息的平均值。有interval时,第一次输出的信息显示自系统启动以来的平均信息,从第二次开始,输出为前一个interval时间段的平均信息。
3、数据来源
/proc/stat
4、命令含义
mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
5、字段含义
[work@builder linux-2.6.14]$ mpstat
Linux 2.6.16.21-0.8-default (liyawei) 05/31/07
10:23:03 CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
10:23:05 all 0.50 0.00 0.00 1.99 0.00 0.00 0.00 97.51 271.64
CPU:处理器ID。
user:在interval时间段里,用户态的CPU时间(%),不包含nice值为负的进程。
nice:详见另一篇博文《进程优先级,进程nice值和%nice的解释》,此略。
sys :在interval时间段里,内核态的CPU时间(%),比如进程的创建/切换、互斥锁等CPU开销。
iowait:在interval时间段里,硬盘IO等待时间(%)。
irq :在interval时间段里,硬中断时间(%)。
soft:在interval时间段里,软中断时间(%)。
idle:在interval时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的闲置时间(%)。
intr/s:在interval时间段里,每秒CPU接收的中断的次数。
6、示例
范例1:mpstat不带参数,输出为从系统启动以来的平均值。
[work@builder linux-2.6.14]$
mpstat
Linux 2.6.9-5.31AXsmp (builder.redflag-linux.com) 12/16/2005
09:38:46 AM CPU %user %nice %system %iowait %irq %soft %idle intr/s
09:38:48 AM all 23.28 0.00 1.75 0.50 0.00 0.00 74.47 1018.59
范例2:每2秒产生所有处理器的统计数据报告,一共产生三个interval 的信息。
[root@server yum_dir]#
mpstat -P ALL 2 3
Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010
09:34:20 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s (从系统启动以来的平均信息)
09:34:22 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.49
09:34:22 PM 0 0.00 0.00 0.50 0.00 0.00 0.00 0.00 99.50 1001.00
09:34:22 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
09:34:22 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s (前2秒的平均信息)
09:34:24 PM all 0.00 0.00 0.25 0.00 0.00 0.00 0.00 99.75 1005.00
09:34:24 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1005.50
09:34:24 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
09:34:24 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s (前2秒的平均信息)
09:34:26 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.49
09:34:26 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.00
09:34:26 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
Average: CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s (三个interval的平均信息)
Average: all 0.00 0.00 0.08 0.00 0.00 0.00 0.00 99.92 1002.66
Average: 0 0.00 0.00 0.17 0.00 0.00 0.00 0.00 99.83 1002.49
Average: 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
三、每个进程的CPU利用率
1、查询命令
pidstat
2、命令格式
pidstat [-p <PID>] [interval [count]]
针对同一PID,当没有参数时,pidstat显示自系统启动以后的信息的平均值;有interval时,第一次输出的信息显示自系统启动以来的平均信息,从第二次开始,输出为前一个interval时间段的平均信息。
3、数据来源
/proc/stat
4、示例
范例1:pidstat不带参数,输出为从系统启动以来的平均值。

范例2:每隔2秒,显示5次,所有
活动进程的CPU使用情况(注意,仅显示活动进程CPU信息)。

范例3:每隔2秒,显示5次,PID为2190的进程的CPU使用情况显示。

(全文完)