12.1.3 CPU监控

来源:互联网 发布:白马啸西风知乎 编辑:程序博客网 时间:2024/04/30 18:35

12.1.3  CPU监控

Linux系统中监控CPU的性能主要关注3个指标:运行队列、CPU使用率和上下文切换,理解这3个指标的概念和原理对于发现和处理CPU性能问题有很大的帮助。

1.运行队列

每个CPU都会维护一个运行队列,调度器会不断地轮循让队列中的进程运行,直到进程运行完毕将其由队列中删除。如果CPU过载,就会出现调度器跟不上系统要求,导致运行队列中等待运行的进程越来越多。正常来说,每个CPU的运行队列不要超过3,如果是双核CPU就不要超过6

2CPU使用率

CPU使用率一般可以分为以下几部分。

q      用户进程:运行用户进程所占用的CPU时间百分比。

q      系统进程:运行系统进程和中断所占用的CPU时间百分比。

q      等待IO:因为IO等待而使CPU处于idle状态的时间百分比。

q      空闲:CPU处于空闲状态的时间百分比。

如果CPU的空闲率长期低于10%,那么表示CPU的资源已经非常紧张,应该考虑进行优化或者添加更多的CPU。“等待IO”表示CPU因等待IO资源而被迫处于空闲状态,这时候的CPU并没有处于运算状态,而是被白白浪费了,所以“等待IO”应该越小越好。

3.上下文切换

通过CPU时间轮循的方法,Linux能够支持多任务同时运行。对于普通的CPU,内核会调度和执行这些进程,每个进程都会被分配CPU时间片并运行。当一个进程用完时间片或者被更高优先级的进程抢占时间块后,它会被转到CPU的等待运行队列中,同时让其他进程在CPU上运行。这个进程切换的过程被称作上下文切换。过多的上下文切换会造成系统很大的开销。在日常维护工作中,也可以通过vmstat命令对CPU资源进行监控。

 

# vmstat 5

procs  ----memory----  ---swap--  ----io----  --system--      ---------cpu----------

r  b  swpd    free     buff   cache    si   so    bi       bo      in     cs     us sy id wa   st

0 2 808788 193147   78936 941420   307 0      21745   1005   1189  2590 34 6  12 48    0

0 2 808788 162212   78893 978920   95  0     12107   0       1801   2633 2   12 3    84    0

1 2 809268 88756    78717 1061424 130 28    18377   113    1142 1694 3  5  3    88    0

1 2 826284 17608    71240 1144180 100 2380 25839   16380 1528 1179 19 9   12 61    0

2 1 854780 17688    34140 1208980 1    3108 25557   30967 1764   2238  43  13 16 28    0

 

所有需要监控的CPU指标都能从该命令的输出结果中获取,其中各列说明如下所示。

q      r:在运行队列中等待的进程数。

q      b:在等待IO的进程数。

q      cs:每秒的上下文切换的次数。

q      us:用户进程使用的CPU时间(%)。

q      sy:系统进程使用的CPU时间(%)。

q      idCPU空闲时间(%)。

q      wa:等待IO所消耗的CPU时间(%)。

由上面的命令输出中可以看到:

q      IO等待的CPU时间(wa)非常高,而实际运行用户和系统进程的CPU时间却            不高。

q      存在等待IO的进程(b>0)。

由此可以得出结论:系统目前CPU使用率高是由于IO等待所造成的,并非由于CPU资源不足。用户应检查系统中正在进行IO操作的进程,并进行调整和优化。

vmstat命令只能显示CPU总的性能情况,对于有多个CPU的计算机,如果要查看每个CPU的性能情况,可以使用mpstat命令,如下所示。

 

# mpstat 2

Linux 2.6.18-92.el5 (demoserver)        20080908

164135 CPU  %user %nice  %sys %iowait %irq  %soft %steal %idle  intr/s

164137 all  2.00        0.00        0.00 0.00  0.00  0.00    0.00   98.00  1009.00

164139 all  4.00        0.00        0.50 0.00  0.00  0.00    0.00   95.50  1036.00

164141 all  4.98        0.00        0.50 0.00  0.00  0.00    0.00   94.53  1002.49

164143 all  1.00        0.00        0.50 0.00  0.00  0.00    0.00   98.51  1003.48

164145 all  6.57        0.00        1.52 0.00  0.51  1.01    0.00   90.40  1881.31

164147 all  14.85       0.00        3.96 0.50  0.50  2.48    0.00   77.72  4025.25

164149 all  20.10       0.00        5.03 0.00  0.50  2.51    0.00   71.86  3460.30

164151 all  24.50       0.00        5.00 0.00  0.50  2.00    0.00   68.00  3653.50

164153 all  33.17       0.00           7.54  14.07    0.50   3.02       0.00    41.71    3465.33

 

命令输出结果中各字段的说明如下所示。

q      CPUCPU号码。

q      %user:运行用户进程所占用的CPU时间(%)。

q      %nice:用户进程的nice操作所占用的CPU时间(%)。

q      %sys:运行系统进程所占用的CPU时间(%)。

q      %iowait:等待io所消耗的cpu时间(%)。

q      %irq:硬中断所占用的CPU时间(%)。

q      %soft:软中断所占用的CPU时间(%)。

q      %steal:虚拟设备所占用的CPU时间(%)。

q      %idlecpu空闲时间(%)。

q      intr/s:每秒钟处理的中断次数(次/秒)。

例如,上述输出结果中的最后一条记录表示运行用户进程所占用的CPU时间为33.17%;用户进程的nice操作所占用的CPU时间为0%;运行系统进程所占用的CPU时间为7.54%;等待IO所消耗的CPU时间为14.07%;硬中断所占用的CPU时间为0.50%;软中断所占用的CPU时间为3.02%;虚拟设备所占用的CPU时间为0.00%CPU空闲时间为41.71%;每秒钟处理的中断次数为每秒3465.33次。

原创粉丝点击