性能测试调优总结与分享

第一点:


         性能优化的思路:

          在性能优化之前需要进行多次性能测试,精准定位性能问题,借助相应的工具包,分析系统性能瓶颈在哪里,在根据其性能指标,

以及所处于层级决定选择优化的方式方法。在选择优化的方式方法时,大家可以参照以下章节调优方法,架构优化递进,进行正确的,有针对性,有步骤的优化。可能会发现部分指导思想或许有相悖嫌疑,大可不必较真,系统优化的过程本身就是一个不断分离+共享的组合拳,至于具体选择哪种优化方式,根据具体需求来定,但大型应用发展的总体思路是不断分离,在通过索引(非数据库)进行关联起来。

I*kE7y7S^-k5Qz0d{0         切记:

         优化一定要对系统进行细致的望闻问切,找到性能问题根源切入点,而不被表象迷糊,对症下药,发现病症所在的医生并不比操作手术刀的医生水平差。本文有工具包一章节,对于需要做优化的人员,需要熟悉,他就是我们诊断所用的CT,例如我们发现内存高了,首先想到不是内存不够用,而是为什么如此消耗内存,用工具看看内存消耗在什么地方。

         迭代优化:

性能优化未必一次性就能满足的,可能此处瓶颈消失了,系统一旦运转快速后,在其他地方又发现新的性能瓶颈,所以性能优化是一个迭代的工作。直至满足系统需要的性能指标。

F m/Mo]4hQ*TM\+^0         优化成本:

         系统性能设计或优化是否可以一步升天,按照最好的分布式架构进行设计和优化呢,单个节点一直也运转及其健康,理论上是可以达到共产国际的,但实际实施层面不可取,必须结合实际的非功能需求进行设计和优化,一则一步到极致的话,系统的成本太过虑庞大,光是性能设计和优化的成本就高于系统本身给客户所提供的价值,也造成研发成本开销过大。二则好像能够架构这样完美系统的人还没诞生。所以一句话也同样适合架构师


        

调优方法51Testing软件测试网,rxk`"\ n%VN(h

数据库优化

1c1ZFjm0

很多应用,优化DB往往是最直接,最方便,见效最显著的,但并非所有的系统性能都处在瓶颈,或者DB瓶颈解决之后,可能应用层瓶颈,WEB层瓶颈,甚至架构瓶颈都会冒出来了,所以数据库优化十分重要,但往往很多人理解系统优化就是数据库优化,是不全面的。优化角色一般推荐具备较深数据知识的程序员,或者专业的DBA,而不只是会CRUD开发人员51Testing软件测试网8o'c/a#at#@

◆ 建立正确的主键,外键,以及索引

L~ Ho(g0

◆ 分离原则:读写分离,业务数据分离51Testing软件测试网"_Q `;V vP`#a*m

a) 分库

oS|%ZtE%{:}b(z-m%M0

b) 分区51Testing软件测试网jN-JD Tc/ii

c) 分表

?P3m_ ~spF#l0

d) 分列(将大字段,不常用的隔离到他表,按需查询)51Testing软件测试网+I7@ Pa*aK hP

◆ 选择隔离级别:某些对数据一致性要求不高的,可以牺牲部分一致性,降低加锁阻塞

O+W:e5Zh oin7h ^0

◆ 保证事务简短以及减少不必要的锁机制。51Testing软件测试网^ c)~+\)AU3z1B

◆ 查询优化规则:

5P;N'lvnQ0

e) 避免表内的相关子查询;51Testing软件测试网} B/YvZN0b

f) 避免排序或为尽可能少的行排序,

2O8a;q){ v6_L0

g) 做大量数据排序时相关数据放在临时表中

&Oof*[+Iw B;j+N Uy0

h) .尽量在where后多传查询条件,以减少不必要返回的行51Testing软件测试网ng M"d+S(Z,q$e:I

i) .尽量select只需要的字段,以减少不必要返回的列51Testing软件测试网l} K6{S8RUB

◆ 分页存储过程:大列表的查询也可以利用分页存储过程达到优化效果。51Testing软件测试网)?4u Y!HOSa

◆ 利用数据库缓存,视图,临时表等最大程度优化系统,并对存储过程和函数进行必要的优化51Testing软件测试网;meV#x)th8w{]

◆ 如有需要,可以冗余表中字段,避免联合查询51Testing软件测试网g3?\C*NK#Q+]

◆ 如有需要,也可以将表内的大字段分离到单独表中,使其单独查询51Testing软件测试网&k,sP/{ZF(e_

◆ 必做多表关联时,尽量过滤不符条件表中数据,减少笛卡尔积计算量51Testing软件测试网Fo N4n!P;H O$_#Ie

◆ 复杂表表:如实时性要求不高,尽量后台任务计算,避免动态查询51Testing软件测试网H2I-w&g&^0}ci

应用层优化51Testing软件测试网 WuyF(KL;Pw/z a'f"d

应用层优化侧重于应用层本身的逻辑优化,算法优化,代码优化等,优化的角色可以是熟悉应用的程序员51Testing软件测试网\ rGz0Z#tK"R^

◆ 优化算法,选择合适高效的算法,降低不必要的递归,循环、多层循环嵌套等计算

w2tC1d#?F7W \0

◆ 避免申请过多的不必要的内存开销51Testing软件测试网k!Y,eq xf-] k'v

◆ 降低内存泄露(using,Dispose,弱引用,Finalize)51Testing软件测试网6md@4DVUc.MQ

◆ 使用频率较低的大文件,大对象,大数组等使用完毕后,及时释放

@0ex:_f%IV0

◆ 使用频率较高的大文件,大对象,大数组尽量缓存51Testing软件测试网L:}-cg6r5}7S

◆ 考虑多线程技术51Testing软件测试网1P~ro vE

◆ 选择适当的通信方式:长连接,短连接,有以下方式Socket、Remoting、Web Services(Rest,Soap)、WCF、 Named Pipes

Q;w2rU9vSx0

◆ 降低应用之间通信次数,例用户认证服务,工作流服务,数据库服务51Testing软件测试网 G X%xV!qT)sD

◆ 降低应用之间传输数据量,不必要传输的不传,少传

3r#H,n!mC E0

◆ 缓存机制:缓存常用的,不易变化的,偶有变化,可以考虑缓存依赖机制51Testing软件测试网]xi;[6HF

◆ 支持异步计算,降低等待时间51Testing软件测试网 y:^`;v4WO8W+[

◆ 考虑延迟加载,或者提前加载两种方式

"M\*G.FPE6x8a0

◆ 分离原则:分离业务模块,如分离大I/O模块、分离高耗内存模块,分离高耗宽带模块

2D7A]Df(Q&J0

◆ 考虑分布式应用,分布式存储,如以上所有仍然搞不定的51Testing软件测试网F x*c~,\~ pL

Web优化51Testing软件测试网!cb Y$t#Fs XX

Web优化偏向于熟悉前端开发的技术人员

Kc9x?E0vG,`0

◆ 减少http请求51Testing软件测试网2E @D2rpgm8U

◆ 避免404错误51Testing软件测试网3{D~)[1d(u9e

◆ 在html页面header加入缓存标签

;cm Z,t} i8Z*g m6D$x9eh0

◆ Gzip压缩网页

Qg0x&G5hf#{0

◆ 减少cookie体积51Testing软件测试网hmfj H S*`'mSk O]0b

◆ 使用外部的js和css

wt ^c&VSxiJ {0

◆ 消减js和css

%}F ~Q/OqY.b0

◆ 压缩js51Testing软件测试网r j?!xo-i~2h

◆ 使用css sprites技术,众多图片合成在一起,通过CSS切分,降低图片传输的频率和数据量51Testing软件测试网Q{-H/_yn#Q

◆ 可以使用静态网页的,避免使用动态网页

D-x Y.E E0

架构优化递进51Testing软件测试网vG!|+M a0~9|

为以示与应用层优化的区别,本文对架构的描述更侧重偏向于物理层面,再次赘述下,涉及变更架构的,需要我们的应用具有良好的拓展性,考验我们的架构师平时的功底,如何刚刚好满足需求以及两三年内业务增量,但并非架构做的越强大,越灵活,越可配置,越易水平拓展就是越好的,其一考虑此应用的投入产出比,换言之,是否值得投入这么多架构设计成本,其二架构设计也是具有一定的时效性的,IT速度太快了,今天的好东西未必是明天的好东西,年轻貌美的姑娘,总有变成老太婆那一天嘛,再者、越灵活的架构,就意味着存在更多的配置项,从某一方面,反而增加了系统的复杂度,最后、很多大型,成熟的应用,也并非一蹴而就,而是通过不断的调整优化,不断变更架构的。圣人也并非天生的,而是不断的总结,提炼,优化,重构51Testing软件测试网N_/y iCnS#G

◆ 硬件方面使用高性能的小型机、存储设备。使用极好的网络带宽

3tD*RI"@?m4o0

◆ 物理分离Web Server和DB Server或者其他服务如:用户认证服务

M5\*\'[2Bd9Pw\N0

◆ 缓存51Testing软件测试网,Z@U5|Q1n1?5To

ü 数据缓存机制51Testing软件测试网9~9jP5m3]-Z

ü 页面缓存机制

7M.K6ielr0

◆ 物理分离业务模块,单业务单独部署一台服务器51Testing软件测试网Q$xd _W t/Otk

◆ 部署多台Web Server51Testing软件测试网#xN7yOxJ*E:f h*I0]!k

◆ Web负载均衡-F5

;T C#kZfg&`0

◆ 数据读写分离

ZFn"K;s F |&d0

◆ 使用消息队列 进行各种应用间进行同步/异步计算

4O2I fk!D I eL0

◆ 应用间选择合适的通信方式,通信协议51Testing软件测试网,v*ka"q3c:V`,p

◆ Web分布式,应用分布式,数据分布式

QIS0Ti y0

◆ 分布式的节点使用高性能服务器,小型机群,辅以高速网络带宽等51Testing软件测试网"Kq&qC5Pg9XU-}

工具包51Testing软件测试网+tG(sC^ S6S5C

◆ 进程管理器,CPU,内存,I/O

`c;|8Q^;x!H0

日志:IIS日志,Windows日志,系统本身日志

'J*j*el!CO@0

◆ 使用dotTrace,跟踪方法执行时间,找出速度慢的方法,针对性优化

j#`/k tP8aOTV0

Sql Profile跟踪SQL耗时情况,针对性优化

$e+ZT,?.Ea#w,{0

◆ HttpWatch跟踪请求耗时,以及发送和收到数据量51Testing软件测试网/b/kFHg]

◆ Performance Count,使用计数器,统计相关性能指标51Testing软件测试网KZ ?U6nrHu

◆ CLRProfiler内存泄露检测工具

k Sl)t'kd4[2v6Q\0

LoadRunner,压力测试,发现性能瓶颈

vy:t}#r8~2y`)n h d0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值