系统性能优化分析—CPU消耗

分析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,服务高峰期可以接受
 
二、每个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使用情况显示。
 
(全文完)
 

猜你喜欢

转载自blog.csdn.net/longdel/article/details/7296446