1、性能分析的目的
1)找出系统性能瓶颈(硬件,软件)
2)×××能优化方案(升级硬件,改进系统结构)
3)达到合理的硬件和软件配置
4)使系统资源使用达到最大的平衡。
2、影响性能的因素
1)CPU
2)内存
3)硬盘(1、raid技术的使用,raid0,raid1,raid0+1,raid5。
2、小文件读写瓶颈是磁盘的寻址(tps),大文件读写的性能瓶颈是带宽
3、Linux可以利用空闲内存作文件系统访问的cache,因此系统内存越大存储系统的性能越好)
4)网络
raid技术概述
raid0:所有磁盘完全地并行读写,所以读写性能最高(有几块硬盘,读写性能就提高几倍)。但是完全没有冗余,所以容错最差,任意一块磁盘损坏,则数据完全丢失。
raid1:即镜像技术,镜像写,并行读,可靠性最高。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。
raid5:是一种储存性能、数据安全和存储成本兼顾的存储方案。raid5至少需要三颗硬盘,riad5不是对储存数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成raid5的各个硬盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。
raid0+1:先条带,再镜像。磁盘分成两组,两组分别先做条带raid0,然后在raid0的基础上做两组raid0再镜像,从而得到riad0+1。
3、性能分析步骤
1)对资源使用状况进行长期的监控和数据采集
2)使用常见的性能分析工具(vmstat iostat free top iftop)
3) 经验积累
1、应用程序设计的缺陷和数据库查询是滥用最有可能导致性能问题
2、性能瓶颈可能是因为程序差、内存不足、磁盘瓶颈,但最终表现出的结果就是CPU耗尽、系统负载高,响应迟缓
3、物理内存不够时会使用交换内存,会带来磁盘IO和CPU的开销大
4、可能是造成CPU瓶颈的问题,频繁执行程序,数据库查询大量的where子句、order by排序
5、可能造成内存瓶颈的问题,高并发用户访问、系统进程多、java内存泄露
6、可能造成磁盘IO瓶颈问题,生成cache文件,数据库频繁更新,或者查询大表
4、vmstat详细介绍
vmstat是一个很全面的性能分析工具,可能观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下文切换、cpu使用等。
[root@~]# vmstat 1 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 5672332 152760 205424 2271256 10 10 129 14 0 0 1 0 99 0 0
0 0 5672332 166516 205424 2257232 0 0 1792 0 1089 1020 0 0 99 0 0
0 0 5672332 163788 205424 2259540 0 0 2304 0 1152 1035 0 1 99 0 0
0 0 5672332 161060 205424 2262232 0 0 2816 60 1400 1059 0 0 99 0 0
0 0 5672332 159820 205424 2264532 0 0 2176 0 1719 1034 0 0 99 0 0
1)procs
1、r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,就说明CPU资源不足,考虑增加CPU。
2、b列表示在等待资源的进程数,比如正在等待IO或者内存交换等。
2)memory
1、swpd列表示切换到内存交换区的内存数量,如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况不用担心,不会影响系统性能。
2、free列表示当前空闲的物理内存数量。
3、buff列表示buffers的内存数据,一般对块设备的读写才需要缓冲。
4、cache列表示page cached的内存数量,一般作文件系统的cached,频繁访问文件都会被cached。如果cached值比较大,就说明cache文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。
3)swap
1、si列表示由磁盘调入内存,也就是内存进入内存交换区的数量。
2、so列表示由内存调入磁盘,也就是内存交换区进入内存的数量。
3、一般情况下,si、so的值都是0,如果si、so值长期不为0,则表示系统内存不足,需要考虑增加内存。
4)IO
1、bi列表示从块设备读入的数据总量
2、bo列表示写入到块设备的数据总量(这里设置bi bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈)
5)system
1、in列表示在某一时间间隔观察到的每秒设备中断数。
2、cs列表示每秒产生的上下文切换数。(上面这两个值越大,会看到内核消耗的CPU的时间就越多。
6)CPU
1、us列显示了用户进程消耗CPU时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序。
2、sy列显示了内核进程消耗CPU时间百分比。sy的值比较高时,就说明内核消耗的CPU时间多,如果us+syf超过80%,就说明CPu的资源存在不足。
3、id列显示了CPU处于空闲状态的时间百分比。
4、wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。
5、st列一般不关注,虚拟机占用的时间百分比。