在对系统的方法化分析中,首要且最基本的工具之一常常是对系统的 CPU利用率进行简单测量。 Linux以及大多数基于 UNIX的操作系统都提供了一条命令来显示系统的平均负荷(loadaverage) 。
[huangc@V-02-01-00860 ~]$ uptime 11:18:05 up 78 days, 1:17, 11 users, load average: 0.20, 0.13, 0.12
具体地讲,平均负荷值代表了在 1min、 5min和 15min内可以运行的任务平均数量。可运行的任务包括当前正在运行的任务以及虽然可以运行但正在等待某个处理器空闲的任务。本例中的系统只有两个 CPU,它可以通过查看/proc/cpuinfo的内容来确定
[huangc@V-02-01-00860 ~]$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 62 model name : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz stepping : 4 cpu MHz : 2500.000 cache size : 25600 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat xsaveopt pln pts dts fsgsbase smep bogomips : 5000.00 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 62 model name : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz stepping : 4 cpu MHz : 2500.000 cache size : 25600 KB physical id : 0 siblings : 2 core id : 1 cpu cores : 2 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat xsaveopt pln pts dts fsgsbase smep bogomips : 5000.00 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management:
尽管该工具可以检测CPU获得了利用情况, 但它并不指明系统正在执行什么工作以及如此繁忙的原因。如果该系统的用户响应时间是可接受的,可能没有任何理由需要更深入地探究系统的运行情况。
诸如uptime之类的简单工具常常是用户试图对应用各种可觉察的缓慢响应时间加以解释的快捷方式。若系统的平均负荷值表明响应时间可能是由单个(或多个)过载的处理器所引起的,那么可以使用许多其他工具来缩小负荷起因的范围。
[huangc@V-02-01-00860 ~]$ vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 3853948 1386860 43092 5049692 1 6 5 34 1 3 27 27 46 0 0
vmstat 5 10上述命令的含义是每 5s 输出 vmstat 信息, 共执行 10 次。 另外, 若根据 uptime 的输出结果, 平均负荷值在过去的 1/5/10min 内一直为 1 , 则该命令的输出结果通常应该在每个输出行均显示一项可运行的任务。 在 vmstat 的输出信息中出现峰值为 5 、 7 甚至 20 的情况并不奇怪。因为负荷平均值是一种计算平均值而不是即时快照。这两个视图对于系统性能分析工作而言各自有其优点 。
[huangc@V-02-01-00860 ~]$ top top - 15:17:44 up 78 days, 5:17, 13 users, load average: 0.00, 0.10, 0.12 Tasks: 227 total, 1 running, 225 sleeping, 1 stopped, 0 zombie Cpu(s): 7.8%us, 12.1%sy, 0.0%ni, 79.9%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 8193720k total, 6315000k used, 1878720k free, 47436k buffers Swap: 4128760k total, 3852496k used, 276264k free, 5054928k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2301 seeproxy 20 0 2196m 13m 660 S 15.5 0.2 15285:39 /home/seeproxy/seeproxy/python27/bin/python /home/seeproxy/seeproxy/seeproxy.p 30824 huangc 20 0 872m 1744 1096 S 7.3 0.0 64:05.38 hsserver -f warmstandby_hc.xml -start proxysvr -t ar -s 1 -status 0 32729 zhouds 20 0 1958m 41m 936 S 4.6 0.5 62:54.17 hsserver -f front_demo.xml -start mainsvr -t ar -s 0 -status 0 32740 zhouds 20 0 2818m 35m 736 S 4.6 0.4 71:29.01 /home/zhouds/linux.x64/bin/hsserver -f queue_demo.xml -t ar -s 0 -d /home/zhou 1307 shizj 20 0 144g 335m 800 S 4.0 4.2 60:50.38 hsserver -f shizj_uft.xml -start mainsvr -t ar -s 0 -uft_status 1 -system_type 498 zhouds 20 0 2722m 48m 5920 S 3.3 0.6 46:57.94 hsserver -f uft_demo.xml -start mainsvr -t ar -s 0 -status 0 -system_type 0 -l 1496 shizj 20 0 26.6g 11m 1188 S 3.3 0.1 43:37.45 hsserver -f shizj_init.xml -start mainsvr -t ar -s 0 -status 0 30829 huangc 20 0 1355m 19m 796 S 3.3 0.2 45:27.38 /home/huangc/linux.x64/bin/hsserver -f warmstandby_hc.xml -t ar -s 1 -d /home/ 1303 shizj 20 0 1286m 6120 728 S 2.3 0.1 30:22.74 hsserver -f shizj_arb.xml -start arbsvr -t ar -s 0 -status 0 32723 zhouds 20 0 1234m 17m 668 S 2.3 0.2 33:27.00 hsserver -f arb_demo.xml -start arbsvr -t ar -s 0 -status 0 32725 zhouds 20 0 614m 632 392 S 1.6 0.0 17:38.62 hsserver -f queue_demo.xml -start proxysvr -t ar -s 0 -status 0 13284 huangc 20 0 15036 1336 948 R 1.0 0.0 0:00.10 top 1341 root 20 0 82292 1412 1104 S 0.3 0.0 154:38.71 /usr/sbin/vmtoolsd 1750 root 20 0 13584 288 220 S 0.3 0.0 15:07.26 lldpad -d 1 root 20 0 19364 312 136 S 0.0 0.0 0:15.99 /sbin/init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.68 [kthreadd] 3 root RT 0 0 0 0 S 0.0 0.0 0:10.29 [migration/0] 4 root 20 0 0 0 0 S 0.0 0.0 36:04.74 [ksoftirqd/0] 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 [migration/0] [huangc@V-02-01-00860 ~]$
[huangc@V-02-01-00860 ~]$ sar -u -P ALL -C 5 Linux 2.6.32-431.el6.x86_64 (V-02-01-00860) 10/12/16 _x86_64_ (2 CPU) 15:50:19 CPU %user %nice %system %iowait %steal %idle 15:50:24 all 3.38 0.00 5.28 0.00 0.00 91.34 15:50:24 0 3.39 0.00 5.30 0.00 0.00 91.31 15:50:24 1 3.36 0.00 5.25 0.00 0.00 91.39 15:50:24 CPU %user %nice %system %iowait %steal %idle 15:50:29 all 3.17 0.00 4.66 0.00 0.00 92.17 15:50:29 0 3.40 0.00 4.25 0.00 0.00 92.36 15:50:29 1 2.75 0.00 5.08 0.00 0.00 92.16 15:50:29 CPU %user %nice %system %iowait %steal %idle 15:50:34 all 2.95 0.00 5.16 0.00 0.00 91.89 15:50:34 0 3.36 0.00 5.25 0.00 0.00 91.39 15:50:34 1 2.75 0.00 4.86 0.00 0.00 92.39网络和磁盘服务进程是耗用 CPU 的系统组件之一。当操作系统生成 I/O 活动时, 相应的设备子系统会作出响应,并使用硬件中断信号来指示 I/O 请求已完成。 操作系统对这些中断进行计数。 输出结果有助于可视化呈现网络和磁盘 I/O 活动的速率。 sar(1) 提供了这种输入。利用性能基线也许可以对系统中断速率进行跟踪,这将是操作系统开销的另一个来源或者系统性能潜在变化的指示器。“ -I SUM ” 选项可以生成如下信息,包括每秒的中断总次数。“ -I ALL ” 选项可以为每个中断源提供类似信息 ( 未显示 )。
10:53:53 INTR intr/s 10:53:58 sum 4477.60 10:54:03 sum 6422.80 10:54:08 sum 6407.20 10:54:13 sum 6111.4010:54:18 sum 6095.40 10:54:23 sum 6104.81 10:54:28 sum 6149.80 . . . Average: sum 4416.5