当前位置: 首页 > 科技观察

Linux系统性能调优之性能分析

时间:2023-03-13 01:36:40 科技观察

性能调优的第一步是性能分析。下面将介绍一些性能分析,特别是Linux性能分析工具vmstat的使用和实践。一、性能分析的目的  1)找出系统性能瓶颈(包括硬件瓶颈和软件瓶颈);  2)提供性能优化方案(升级硬件?改进系统架构?);  3)实现合理的软硬件配置;  4)在系统资源的使用上达到最大的平衡。(一般情况下,当系统运行良好时,所有资源都达到了一个平衡体。任何资源的过度使用都会对平衡系统造成破坏,导致系统负载过高或响应缓慢。例如,过度使用资源CPU会导致大量进程等待CPU资源会减慢系统响应,等待会增加进程数,进程增加会增加内存占用,内存耗尽会导致虚拟内存的使用,以及使用虚拟内存会增加磁盘IO和CPU开销)2.影响性能的因素  1)CPU(cpu的速度和性能很大程度上决定了系统的整体性能,是否使用SMP)  2)内存(当物理内存不够时,会使用swap内存,swap会带来磁盘I0和cpu的开销)  3)硬盘(存储系统)  a。Raid技术使用(RAID0、RAID1、RAID5、RAID0+1)  b。小文件读写的瓶颈是磁盘寻址(tps),大文件读写的性能瓶颈是带宽  c。Linux可以使用空闲内存作为文件系统访问的缓存,所以系统内存越大,存储系统的性能越好  4)网络带宽。  3。性能分析步骤  1)资源使用情况的长期监控和数据收集(nagios、cacti)  2)使用常用的性能分析工具(vmstat、top、free、iostat等)  3)积累经验  a.应用程序设计中的缺陷和数据库查询的滥用最有可能导致性能问题  b。性能瓶颈可能是因为程序不好/内存不足/磁盘瓶颈,但最终的结果是CPU耗尽,系统负载极高,响应缓慢,甚至暂时失去响应d.可能造成CPU瓶颈的问题:频繁执行Perl、php、java程序生成动态网页;带有大量where子句的数据库查询,orderby/groupby排序...  e.可能造成内存瓶颈:用户访问高并发、系统进程多、java内存泄露...  f.可能造成磁盘IO瓶颈:产生缓存文件,频繁更新数据库,或者查询大表...  4.vmstat详细介绍  vmstat是一个非常全面的性能分析工具,可以观察进程状态,内存使用情况、系统的虚拟内存占用、磁盘IO、中断、上下文切换、CPU占用等。对于Linux性能分析,如果你100%理解vmstat输出的含义并能灵活运用,那么你就基本掌握了分析系统性能的能力。  以下是vmstat命令的输出:  [root@monitor-www~]#vmstat15  procs————memory——————swap————io—————系统————cpu——  rbswpdfreebuffcachesisobiboincsussyidwast  1084780909744267428191207600209400219510  1128478089496826742819122160001396230111337838900  108478090068026742819123400076142818548082729000  108478090254426743219125480011692816557502729200  2084780900076267432191294800180904196387031038700  解释输出如下:  1)procs  a.r列表示正在运行和等待CPU时间片的进程数。如果该值长期大于系统CPU数,说明CPU资源不足,考虑增加CPU;  b.b列表示等待资源的进程数,例如等待I/O或内存交换。  2)memory  a.swpd一栏表示切换到内存交换区的内存量(以KB为单位)。如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;  b.free列表示当前可用的物理内存量(以KB为单位);  c.buff列表示bufferscache中的内存量,一般需要缓冲来读写块设备;  d.cache一栏表示页面缓存内存的大小,一般用于缓存的文件系统,经常访问的文件都会被缓存。如果缓存的值越大,说明缓存的文件越多。如果此时IO中的bi比较小,说明文件系统效率更高。  3)swap  a.si栏表示从磁盘调出的内存数,即进入内存交换区的内存数;  b.so一栏表示内存转移到磁盘,也就是内存交换区进入内存量  c。一般情况下,si和so的值都是0,如果si和so的值长期不为0,说明系统内存不足,需要考虑是否增加系统内存。  4)IO  a.bi列表示从块设备(即读磁盘,单位为KB/s)读取的数据总量数据写入块设备(即写入磁盘,单位KB/s)  这里设置的bi+bo参考值为1000,如果超过1000且wa值比较大,说明系统盘IO性能瓶颈。  5)system  a.in栏表示在一定时间间隔内观察到的每秒设备中断次数;  b.cs列表示每秒生成的上下文切换次数。  以上两个值越大,内核消耗的CPU时间就越多。  6)CPU  a.us列显示了用户进程消耗CPU的时间百分比。当us的值比较高的时候,说明用户进程消耗的CPU时间比较多。如果长期大于50%,就需要考虑优化程序什么的了。  b.sy列显示内核进程消耗CPU的时间百分比。当sy的值比较高的时候,说明内核消耗的CPU时间比较多;如果us+sy超过80%,说明CPU资源不足。  c.id列表示CPU处于空闲状态的时间百分比;  d.wa列显示了IO等待占用的CPU时间百分比。wa值越高,IO等待越严重。如果wa值超过20%,说明IO等待严重。  e.st栏一般不用关注,虚拟机占用的时间百分比。(Linux2.6.11)