性能优化杨济铭2011-8-18如果你不能成为一个追求性能的疯子,那么性能将会把你变成疯子!目录•何为性能优化•性能优化思路•性能优化工具何为性能优化•在不影响系统运行正确性的前提下,使程序响应时间更短,运行地更快,完成特定功能所需的时间更短。•性能优化不是重新设计,性能优化是以现有的产品和代码为基础的,而不是推倒重来。•性能优化非性能设计;性能设计是正向建设,而性能优化是反向修复。性能优化层次•系统层次•网络层次•架构层次•代码层次思想比工具更重要•性能检测•性能分析•性能优化•性能校验(性能测试)性能检测步骤•观察,初步假设,预测,测试/控制和测试的最终结果即一个理论和结论。性能检测•系统检测•数据库检测•网站检测•.Net•客户端检测•IIS检测性能分析•瓶颈分析方法•先粗后细•由外而内、由表及里、层层深入•对比分析•关联分析性能优化•系统性能优化•数据库性能优化•客户端优化•Asp.net优化•IIS优化系统优化•确认服务器硬件是否足够支持当前的流量。•优化数据库访问•禁止外部的盗链。•控制大文件的下载•使用不同主机分流主要流量•使用流量分析统计软件•图片服务器需要与应用服务器相分离。客户端优化•减少HTTP请求数量•使用CDN•启用内容过期•启用Gzip压缩•将样式文件放在头部•将脚本文件放在尾部•避免CSS表达式•使用外部的JavaScript和CSS•减少DNS查询•压缩JavaScript文件•避免重定向•删除重复脚本•配置ETag客户端优化•减少DNS查询次数,响应时间•增加单个TCP的使用时长,增加TCP并发连接数,减少TCP连接响应时间•减少服务器响应时间•减少下载时长•减少页面的显示加载时长数据库优化•逻辑数据库和表的设计数据库的逻辑设计•拆分库(垂直和水平拆分)•索引的设计•查询语句的设计数据库优化•把数据、日志、索引放到不同的I/O设备上,增加读取速度•纵向、横向分割表,减少表的尺寸•重建索引Asp.net优化•优化程序结构,减少不必要的数据查询。•使用cache•使用ajax减少传输负担。•能静态化的就静态化(减少数据库服务器压力)。或使用memcached•使用镜像加速(CDN)•数据库与网页分开在不同的服务器上•增加网页服务器与数据库服务,并使用负载均衡技术。性能校验•性能校验是性能测试的一个难点。•使用压力测试工具测试同时要使用性能检测工具检测系统的CPU、内存、硬盘、网络等硬件的吞吐量。•比较测试结果,通过多次测试比较性能优化是否达到目标。欲善其事,先利其器•window下的性能检测工具•sqlserver性能检测工具•性能测试工具•.net性能检测工具•客户端检测工具•IIS性能检测工具•流量分析统计工具性能优化实践•1、通过window资源管理器初步判断系统瓶颈所在数据库服务器window2008数据库服务器window2008IIS服务器window2003经初步分析,发现系统瓶颈主要在数据库服务器上?内存?硬盘?对数据库服务器情况进行初步了解:服务上安装有sqlserver2008数据库,同时安装有一个虚拟机(window2003)服务器配置如下图:性能优化实践•2、建立基本计数器对服务器进行检测,进一步进行验证相关猜测建立如下四大计数器:内存:Memory\AvailableMbytes,Memory\page/sec,Memory\pageread/sec,Memory\PageFaults/sec,Memory\CacheBytes,Memory\Pagespersecond检测内参瓶径需要同时检测硬盘两个计数器:PhysicalDisk\%DiskTime和PhysicalDisk\Avg.DiskQueueLengthCPU:Processor\%ProcessorTime,Processor\%UserTime,Processor\%PrivilegedTime,Processor\%DPCTime硬盘:PhysicalDisk\%DiskTime%,PhysicalDisk\Avg.DiskQueueLength,PhysicalDisk\AverageDiskRead/WriteQueueLength,DiskReads(Writes)/s,PhysicalDisk\AverageDisksec/Read,PhysicalDisk\AverageDisksec/Transfer网络:NetworkInterface\BytesTotal/sec内存和硬盘相关线比较,发现硬盘队列增大时,内存读命中率增加,表示不存在内存瓶径,那么瓶径就在硬盘?查看硬盘队列,发现硬盘队列很小,那也不是硬盘问题;网络使用达不到最大带宽一半,说明网络不是瓶径.综合来看,问题并不出现在硬件上.那么问题就主要出现在数据库及应用程序方面,接下来重点监控数据库及web应用程序.性能优化实践•3定位性能问题程序,进行专门监测(可使用性能计算器或xperf)Asp.net监控•Processor(_Total)\%ProcessorTime•Process(aspnet_wp)\%ProcessorTime•Process(aspnet_wp)\PrivateBytes•Process(aspnet_wp)\VirtualBytes•Process(aspnet_wp)\HandleCount•Microsoft®.NETCLRExceptions\#Excepsthrown/sec•ASP.NET\ApplicationRestarts•ASP.NET\RequestsRejected•ASP.NET\WorkerProcessRestarts(notapplicabletoIIS6.0)•Memory\AvailableMbytes•WebService\CurrentConnections•WebService\ISAPIExtensionRequests/sec数据库监控•Sqlserverprofiler•性能监视器•SQLServer2008性能数据收集器分析工具分析•Logparser对IIS日志进行分析•RMLUtils对Sqlserverprofiler收集的数据进行分析•另外附加异常监控工具:DebugDiagnosticTool和sqldiag其他辅助分析•综合分析•环比分析•节点分析•客户端分析《在线分析及工具分析》firebug优化四部曲•先优化系统配置(包括硬件,软件)•再优化数据库(索引、复杂查询等)•后优化程序(长时间代码、大数据返回等)•最后优化客户端(网络及客户端缓存等)优化校验•合理的测试环境(尽可能接近实际环境)•考虑性能检测工具对性能的影响•考虑网络负担小结•性能优化是一个不断积累的过程,在这个过程中,总结和学习自己用的顺手的工具和技巧,不断尝试,不断思考,才会有收获•思想碰撞才有火花