性能调优的第一步是性能分析,下面从性能分析着手进行一些介绍,尤其对Linux性能分析工具vmstat的用法和实践进行详细介绍。
1、性能分析的目的
(1)找出系统性能瓶颈(包括硬件瓶颈和软件瓶颈);
(3)达到合理的硬件和软件配置;
(4)使系统资源使用达到最大的平衡。(一般情况下系统良好运行的时候恰恰各项资源达到了一个平衡体,任何一项资源的过渡使用都会造成平衡体系破坏,从而造成系统负载极高或者响应迟缓。比如CPU过渡使用会造成大量进程等待CPU资源,系统响应变慢,等待会造成进程数增加,进程增加又会造成内存使用增加,内存耗尽又会造成虚拟内存使用,使用虚拟内存又会造成磁盘IO增加和CPU开销增加)
2、影响性能的因素
(1)CPU(CPU的速度与性能很大一部分决定了系统整体的性能,是否使用SMP);
(2)内存(物理内存不够时会使用交换内存,使用swap会带来磁盘I0和CPU的开销);
(3)硬盘(存储系统);
a、Raid技术使用(RAID0,RAID1,RAID5,RAID0+1);
b、小文件读写瓶颈是磁盘的寻址(tps),大文件读写的性能瓶颈是带宽;
c、Linux可以利用空闲内存作文件系统访问的cache,因此系统内存越大存储系统的性能也越好;
(4)网络带宽。
3、性能分析的步骤
(1)对资源的使用状况进行长期的监控和数据采集(nagios、cacti);
(2)使用常见的性能分析工具(vmstat、top、free、iostat等);
(3)经验积累;
a、应用程序设计的缺陷和数据库查询的滥用最有可能导致性能问题;
b、性能瓶颈可能是因为程序差/内存不足/磁盘瓶颈,但最终表现出的结果就是CPU耗尽,系统负载极高,响应迟缓,甚至暂时失去响应;
c、物理内存不够时会使用交换内存,使用swap会带来磁盘I0和CPU的开销;
d、可能造成CPU瓶颈的问题:频繁执Perl,php,java程序生成动态web;数据库查询大量的where子句、order by/group by排序……
e、可能造成内存瓶颈问题:高并发用户访问、系统进程多,java内存泄露……
f、可能造成磁盘IO瓶颈问题:生成cache文件,数据库频繁更新,或者查询大表……