Linux性能监控之CPU篇

Linux性能监控之CPU篇 任何系统的性能比较都是基于基线的,并且监控CPU的性能就是以下3点,运行队列、CPU使用率和上下文切换。以下是一些对于 Linux性能监控CPU很普遍的性能要求: 1、对于每一个CPU来说运行队列不要超过3,例如,如果是双核CPU就不要超过6; 2、如果CPU在满负荷运行,应该符合下列分布, a.User Time:65%~70% b.System Time:30%~35% c.Idle:0%~5% 3、对于上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。 常用的监视工具有,vmstat, top,dstat和mpstat。 [shell gutter="false"]#vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st  0  0      0 2986588 299224 297620    0    0     0     2   23    6  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    12 1036  101  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    36 1035   97  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1033   91  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1024   76  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1030   87  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1025   76  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    12 1023   90  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    12 1030   93  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1022   83  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1026   76  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1026   88  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1028   68  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    12 1052  103  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    12 1036   98  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1034   81  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1031   73  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1039   92  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1024   72  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    12 1029   91  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    12 1035   90  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1026   80  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1022   66  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1040   93  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1022   65  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    12 1030   91  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    12 1021   79  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1020   82  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1028   72  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1032   91  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1032   74  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    12 1032   99  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0    44 1039   94  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1033  104  0  0 100  0  0  0  0      0 2986588 299224 297620    0    0     0     0 1028   78  0  0 100  0  0[/shell] r表示运行队列的大小, b表示由于IO等待而block的线程数量, in表示中断的数量, cs表示上下文切换的数量, us表示用户CPU时间, sys表示系统CPU时间, wa表示由于IO等待而是CPU处于idle状态的时间, id表示CPU处于idle状态的总时间。 dstat可以给出每一个设备产生的中断数: [shell gutter="false"]# dstat -cip 1 ----total-cpu-usage---- -interrupts ---procs--- usr sys idl wai hiq siq|  50    82 |run blk new   0   0 100   0   0   0|   1   352 |  0   0   0   0   0 100   0   0   0|   2    26 |  0   0   0   0   0 100   0   0   0|   2    25 |  0   0   0   0   0 100   0   0   0|   0    26 |  0   0   0[/shell] 我们可以看到这里有2个设备号50和82.设备名和设备号的关系我们可以参考文件/proc/interrupts, 这里82代表网卡eth0。 [shell gutter="false"]# cat /proc/interrupts            CPU0       CPU1       CPU2       CPU3         0:  170498971          0          0          0    IO-APIC-edge  timer   1:          3          0          0          0    IO-APIC-edge  i8042   7:          2          0          0          0    IO-APIC-edge  parport0   8:          0          0          0          0    IO-APIC-edge  rtc   9:          0          0          0          0   IO-APIC-level  acpi  50:     155505          0          0          0   IO-APIC-level  uhci_hcd:usb3, ahci  82:   59898977          0          0          0         PCI-MSI  eth0 169:          0          0          0          0   IO-APIC-level  uhci_hcd:usb5 177:          0          0          0          0   IO-APIC-level  uhci_hcd:usb4 185:          0          0          0          0   IO-APIC-level  ehci_hcd:usb1, uhci_hcd:usb2 NMI:       3510        729       1011        846 LOC:  166966394  166966344  166991682  166991619 ERR:          0 MIS:          0[/shell] mpstat可以显示每个CPU的运行状况,比如系统有4个CPU。可以使用yum install sysstat安装。 我们可以看到: [shell gutter="false"] mpstat -P ALL 1 Linux 2.6.18-194.32.1.el5 (serv)  2011年01月17日 16时18分53秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s 16时18分54秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00   1045.92 16时18分54秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00   1043.88 16时18分54秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00      0.00 16时18分54秒    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00      0.00 16时18分54秒    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00      0.00[/shell] 总结的说,Linux性能监控包含以下方面: 检查系统的运行队列,确保每一个CPU的运行队列不大于3.确保CPU使用分布满足70/30原则(用户70%,系统30%)。如果系统时间过长,可能是因为频繁的调度和改变优先级。CPU Bound进程总是会被惩罚(降低优先级)而IO Bound进程总会被奖励(提高优先级)。
posted @ 2011-01-17 16:08  刘光明  阅读(221)  评论(0编辑  收藏  举报