一、前言
通过对系统中和性能相关的各个环节的介绍,使大家知道出现性能问题时可以从那些方面入手去查,而分析典型应用对系统资源使用的特点,让大家对应用和系统资源的依赖有更直观的认识。
大多数的硬件性能问题主要和CPU 、IO系统(磁盘、网络)、内存相关,而且应用程序设计的缺陷(例如数据库查询的滥用)也最最常见的性能问题。
需要注意的是,大多数情况下,虽然性能瓶颈是程序性能差或是内存不足或是磁盘瓶颈等各种原因引起,但最终表现出的结果就是CPU 耗尽、系统负载极高、响应迟缓、甚至暂时失去响应,因此我们观察系统状况时,最先看的就是系统负载和CPU空闲度。当你阅读完了这遍文档以后就会有一个对系统分析的思路。
二、性能分析的目的
● 找出系统性能瓶颈
1)硬件瓶颈
2)软件瓶颈
● 提供性能优化方案
1)升级硬件
2)改进系统结构
● 达到合理的软硬件配置
● 使系统资源使用达到平衡(遗憾的是解决一个性能瓶颈,往往又会出现另外的瓶颈或者其他问题,所以 性能优化更加切实的目标是做到在一定范围内使系统的各项资源使用趋向合理和保持一定的平衡)
系统运行良好的时候恰恰也是各项资源达到了一个平衡体,任何一项资源的过渡使用都会造成平衡体系破坏,从而造成系统负载极高或者响应迟缓。比如CPU过渡使用会造成大量进程等待CPU资源、系统响应变慢等问题,等待又会造成进程数增加,进程增加又会造成内存使用增加,内存耗尽又会造成虚拟内存使用,使用虚拟内存又会造成磁盘IO增加和CPU开销增加(用于进程切换、缺页处理的CPU 开销)。
三、性能相关的各个环节
3.1 硬件资源
● CPU
1)是否使用SMP。
2)单颗CPU的性能对依赖CPU的某些应用的影响很严重,比如数据库的查询处理。
● 内存
1)物理内存
物理内存不够时会使用交换内存。
2)交换内存
使用交换内存会带来磁盘IO和使CPU的开销增加。
● IO系统 (存储系统)
1) SCSI 磁盘
2) ATA/SATA 磁盘
3) RAID 磁盘阵列(RAID0 , RAID1 , RAID5 , RAID0+1 )
● 一些经验
1)小文件读写的性能瓶颈是磁盘的寻址(随机读写性能更差),评估的标准是tps
2)大文件读写的性能瓶颈是带宽,评估的标准是持续的读写速度
3)Linux可以利用空闲内存作文件系统访问的cache,因此系统内存越大存储系统的性能也越好
● Network
网络是linux中最复杂的子系统,有太多的因素影响其性能。
● 带宽
1)网络带宽
2)SCSI 总线带宽
大文件访问时SCSI 的带宽瓶颈
3)系统总线带宽
3.2 操作系统
● SMP 性能
● VM 性能
● IO 性能(存储设备、网络设备、异步IO )
● 文件系统性能(大文件优化、小文件优化、写优化、读优化、网络文件系统)
● 多线程性能
3.3 服务器软件
根据各个服务器的不同而定制不同的软件,这里就不多说了,服务器软件实在是太多了。
3.4 开发平台/ 中间件软件/ 框架软件
没有什么规范的定义,按情况而定。
3.5 应用程序
一些应用软件。
四、典型应用对系统资源使用的特点
4.1 动态内容为主的Web 应用
1)频繁执行程序,如 Perl , PHP , Java 等,消耗CPU 严重。
2)提供并发用户访问,因此系统进程数多,消耗内存多,当内存不足时,使用交换内存也会增加CPU 的开销。
3)磁盘的写IO 比较频繁(主要为随机写),比如生成cache 文件,更新session 文件等。
4)内存充足时读取的内容可以被cache 住,cache 的命中率和文件更新的频繁程度成反比,磁盘的读IO 相对较小 。
4.2 静态内容为主的Web 应用 (如Squid Cache )
1)网络带宽瓶颈。
2)小文件的随机读取频繁,内存充足时可以缓解磁盘随机读的压力。
3) 系统内存不足时磁盘IO 量会比较大(读、写、交换内存),因此增加CPU 的开销。
4.3 数据库应用
1)数据库查询语句复杂,大量的 where 子句,order by , group by 排序等,CPU 容易出现瓶颈。
2)表太大时,查询遍历全表造成磁盘读的IO 量大,容易出现读IO 等待的情况。
3)数据更新量大或者更新频繁时,造成磁盘写的IO 量大。
4)内存不足时频繁使用交换内存。
4.4 软件下载
1)网络带宽瓶颈
2)存储系统带宽瓶颈(读)
4.5 流媒体服务
1)网络带宽瓶颈
2)存储系统带宽瓶颈(读)
五、系统使用和优化的原则
5.1 系统监控和数据收据
对资源的使用状况作长期的监控和数据收集
Snmp+MRTG (网络流量监控)
Sar (系统资料监控及收集)
5.2 优化建议
程序的优化和系统结构的优化比硬件的性能优化更有效
5.3 限制使用系统资源
避免不受限制的使用系统资源
设置各项服务对资源的使用限额,如Apache , MySQL ,PHP 等
5.4 保留空闲资源及资源均衡
始终保留一定量的空闲资源
多少合适?根据应用的特点,比如是否有突发性使用增长?
日常情况下,保留至少 60% 的系统资源,以应付突发使用增长。
日常情况下,资源使用率达到 80% 时,你必须有所行动了,尤其是web 应用。
系统硬件达到合理的配置(以适合应用的特点为依据,资源消耗均衡为目标)
系统性能的水桶理论
应用软件对资源的使用要均衡(理想目标),怎么样就算是均衡了?我也在摸索中……
理想状况为:CPU 消耗到50% 的时候,磁盘的带宽也到50% ,磁盘的tps 也到50% ,内存使用也到50% (除去可以提供给cache 的内存)
阅读(2578) | 评论(0) | 转发(0) |