渐渐的发现性能优化的确是一个长期的复杂的工作,需要长时间的监控和数据积累,只有有了数据才能够判断系统的瓶颈可能出现在什么地方,有哪些可能的解决方法。系统的优化永远是一个监控、测试、优化、再监控的循环过程,没有捷径,没有一劳永逸。最近上的虚拟化项目,充分体现了这一点。

一般情况下,从用户反馈回来的信息只有系统响应慢,再详细的就只有自己去监控了,没有在生产系统上采集到的第一手数据,优化基本上无从下手。通常情况下,主要包括cpu、内存、IO、网络等四方面的数据。

系统可能存在的瓶颈一般可以划分为IO密集型和cpu密集型,前者如DB服务器,文件服务器等,后者如mail服务器,科学计算等。

数据收集的过程也是一个建立性能的base line的过程,什么情况下性能算好,什么情况下不好,需要丰富的运维经验或者也可以基于对系统性能的预期,达到了预期就认为性能是好的。

主要用到的测试工具有:iostat、vmstat、sysbench、iozone、nload、iftop、iperf、top、sar、mpstat、netstat、iptraf、tcpdump、tcptrace、netperf

本文主要介绍vmstat、mpstat,vmstat和mpstat包含在centos默认的安装包里面,无需单独安装配置。

下面是vmstat的输出结果:

[tianjing@tianjing-ops Tue Nov 15 10:31 AM ~]$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 0 0 30762152 171660 1870160 0 0 0 0 3 7 0 0 100 0 0
0 1 0 30762412 171660 1870160 0 0 0 5 1055 158 0 0 100 0 0
0 0 0 30759860 171660 1870172 0 0 0 0 1053 165 0 0 100 0 0
2 0 0 30711808 171700 1904892 0 0 6942 75 1145 2320 2 1 97 1 0
0 3 0 30483640 171908 2115824 0 0 42269 26122 1420 13788 12 3 84 2 0
0 2 0 30368244 172020 2231884 0 0 23203 45184 1355 6988 6 2 86 5 0
0 3 0 30171988 172200 2418656 0 0 37438 29266 1393 10601 10 2 84 3 0
0 3 0 30013028 172352 2572772 0 0 30930 37276 1388 9082 8 2 85 4 0

 

第一部分procs:

r: The number of processes waiting for run time. 等待运行的进程数
b: The number of processes in uninterruptible sleep. 处于不可中断睡眠的进程数,即IO等待中的进程数

 

第二部分memery

swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache. 不知道buff和cache有什么区别?
 

 

第三部分swap

si: Amount of memory swapped in from disk (/s). 从虚拟内存中换入的内存的总量
so: Amount of memory swapped to disk (/s). 从内存换出到虚拟内存中的总量
 

 

第四部分IO

bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).

 

第五部分system

in,被处理过的中断数
cs,系统上正在做上下文切换的数目

如果interrupts(in)非常高,context switch(cs)比较低,说明这个 CPU 一直在不停的请求资源;
user time(us)一直保持在 80% 以上,而且上下文切换较低(cs),说明某个进程可能一直霸占着 CPU;

如果context switch(cs)比 interrupts(in)要高得多,说明内核不得不来回切换进程;
进一步观察发现 system time(sy)很高而 user time(us)很低,而且加上高频度的上下文切换(cs),说明正在运行的应用程序调用了大量的系统调用(system call) 


 

 

mpstat:

[tianjing@tianjing-ops Tue Nov 15 01:54 PM ~]$mpstat -P ALL 3
Linux 2.6.18-194.el5 (tianjing-ops) 11/15/2011
01:55:00 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
01:55:03 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1066.00
01:55:03 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1000.33
01:55:03 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
01:55:03 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
01:55:03 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
01:55:03 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 54.33
01:55:03 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
01:55:03 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
01:55:03 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
01:55:03 PM 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 4.67
01:55:03 PM 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
01:55:03 PM 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 6.33
01:55:03 PM 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00

 

-P用于指定cpu,ALL表示全部,也可以用数字表示第几个cpu。

数字3表示每三分钟刷新一次。

参考连接:

http://www.vpsee.com/2009/11/linux-system-performance-monitoring-cpu/

http://www.vpsee.com/2009/11/linux-system-performance-monitoring-introduction/