软件测试中性能调优的过程解析

上一篇 / 下一篇  2011-12-14 16:29:21 / 个人分类:性能测试

51Testing软件测试网3c+D^-He4y1n/K

性能调优无疑是个庞大的话题,也是很多项目中非常重要的一环,性能调优的难做是众所周知的,毕竟性能调优涵盖的面实在是太多了,在这篇文章中我们蜻蜓点水般的来看看性能调优这项庞大的工程都有些什么过程,同时也看看这些过程中常见的一些做法。

Opdq!p w2ea?051Testing软件测试网] O b |{.?

确定性能调优的目标

&b2JMt JR051Testing软件测试网/m_ O'|5V7x9ob

性能调优,首先是要确定性能调优的目标是什么,如果现在应用已经满足了需求,就没必要去做性能调优了,毕竟不经过一个系统的过程,其实是无法确定你所做的性能调整是否真的调优了性能,是否没有造成应用中其他的问题,所以确定性能目标是非常重要的,在定义性能目标的时候通常这么定义的呢:51Testing软件测试网{ m4[~7H m

51Testing软件测试网2Kwl d|

1、最大并发数

4_\8ZgF*S)y$s$K0

Bv,B m @ x D02、Quality of Service51Testing软件测试网/k~w+e$Z.d4p

y%v#WU\+wK(@5E@1f0服务的质量,在软件系统方面我们认为主要表现在请求的出错率,系统的load等。51Testing软件测试网;[4n2GS#X{7sr

51Testing软件测试网6?g ? FJ

3、最长响应时间51Testing软件测试网b E3kuyveNY

51Testing软件测试网#^Q/e)h+CG

对于任何请求所能承受的最大响应时间。51Testing软件测试网.T-|m MD#^)t#n

z'K_1tJ04、TPS

^ wDW5z9PZ051Testing软件测试网W,Q a eA%yp.r

每秒需要支持的最大事务数,最典型的指标是:“某页面最高需要支撑每秒7000次的访问次数”。51Testing软件测试网o8|UJE"z'?

#r#f I z'g5PLW,q0例如一个web系统,需要定义出来的目标是:

%C`sm}:`5r~ f051Testing软件测试网m uc(t2S-Q o.~At7g

并发目标:最高支撑200并发;

X:S*z{ C^ g0

5G @ Sx [8z)l0QoS:出错率须控制在万分之一,系统的load最高只能到达10;51Testing软件测试网b&F tn8{$Z.]r$|

L.m |fMY8a0TPS:每秒完成7000次请求的处理;51Testing软件测试网NA)sP2H,P

z;j%@]IQ0最大响应时间:最长允许的响应时间为5秒。51Testing软件测试网5I_q9U y^W

_/|P%sbhU2_,e*fY0至于请求的平均响应时间这些就不在性能调优目标中定义,因为要达到TPS的要求,响应时间是必须要达到一个级别的,而且响应时间随着高并发是会出现劣化的。

eM:M)jZFD'M051Testing软件测试网|y:}@M5Ao

当然,还可以把性能指标定到更为细节,例如某个方法的TPS在100并发时需要达到多少。

#kp.X R|-o051Testing软件测试网bD!B Vay%M

在确定好了性能目标后,重要的就是如何来测量系统的性能了。

Wn`g @0

Ss,F6` _%Gtb;T0测量系统性能51Testing软件测试网I&m%fLgqga6U6h

51Testing软件测试网h(s'c ?9BUG8b

对于新系统而言,需要评估出其正式运行时的数据量的增长情况;而对于已运行的系统,则需要根据监控获取到系统的运行数据(例如高峰并发数、系统的响应速度情况、系统的load、网络流量、每类请求在总的请求中所占的百分比等)。

*hT D ]Te0

.LJ9b$xa.uYZS `0对于新系统而言,要评估出具体的性能相对来说稍微好做一点,因为此时系统通常较为单纯,数据量的增长也不可能是一夜之间增长的,因此基本可以按照一种正常的方法在测试环境评估出其正式运行的性能。

7ZnT!I?)kQj0

2o#Ll6M$ZtC i.R0而对于已运行的系统而言,则较为麻烦,因为通常来讲要在测试环境中模拟正式运行环境基本是不太可能的,因此这个时候通常要采取一些模拟的方法或更高压力的方法来尽量更为准确的评估出系统的性能。51Testing软件测试网zd ]{ q:b

Er'u:OE~h4K0在测试系统性能时,通常可采用的方法有:

0F#fwC5S(}0

X%ag4})Wk\xh,\01、单元测试;51Testing软件测试网C"D'u$lB},g3_s

51Testing软件测试网)sM0R~(fh

可借助单元测试来测试某个请求的性能;51Testing软件测试网k+bt*B `_ Zz

51Testing软件测试网LyU*u1@2WoVs1` Y

2、压力测试;51Testing软件测试网7z6~;m ]Mf:{ z,K8l!So?

H-E3j Wg5jk^)WPy0压力测试无疑是测量系统性能中最常采用的方式,根据定义的性能目标对系统进行压力测试,以确定系统是否满足性能要求,同时也可以根据压力测试的结果来分析系统的瓶颈,进而进行对应的调优,可用于做压力测试的工具还是不少的,像loadrunner、jmeter等等,不过压力测试这个话题实在太大了,不在这里展开去讲了,不过我也不怎么懂就是,呵呵。51Testing软件测试网| D?8p7G I\#d

51Testing软件测试网p _3{:\)d B`7Mz;N ow

分析系统性能瓶颈51Testing软件测试网qQ`0h?0[ v/oh S

W8O-dSL^?;A0根据测量系统性能的结果,多数是可以分析出系统性能的瓶颈,同时还可以结合像jvm堆栈、jprofiler、系统日志等来进行进一步的确定,另外也可以根据性能调优人员的经验,例如可以去了解开发人员是否采用了不适合的数据结构等。

b5]x6i@ Yx0

j4d+Ef c~M| v0简单说一个线程分析的例子:51Testing软件测试网 hM!]u+yC Z[

"i3t.CZy!V0借助kill -3 pid来获取到目前jvm的线程堆栈信息,特别需要关注的是里面wait for monitor这样的线程,这种线程是指在等待锁的线程,等待一两分钟后再次kill -3 pid,看看这些wait for monitor的线程的变化情况,这对于分析线程中是否存在不合理的竞争过高的锁的分析是非常重要的。51Testing软件测试网J7b(p#`;{yL,F.K3r

r,s+BBpS3v iZ0这一步无疑也是性能调优过程中最难的一步了,分析系统性能瓶颈这种基本只能结合实际例子来讲了,正确在后续抽取一两个例子来进行讲解。51Testing软件测试网]Lv*{%Lv6Hw

6jl G Zr0性能调优

&U b;o$_2~0E.y051Testing软件测试网/Q:i f SM x

在分析出系统性能的瓶颈后,其实这一步相对来说还好做些,当然,需要建立在对软硬件知识都有很好的深入了解的基础上,在这里列举一些比较常见的性能调优的手段,多数是抄来或google来的,自己在这方面的经验还不多,希望大家多加指点。

L;?"]CT#P s051Testing软件测试网@#BrTlVp

RedhatLinux内核

5H%PpV S0

,F}tz.Z0Redhat linux内核版本升级到2.6,2.6和2.4的差别还是很多的,例如对epoll的支持、NPTL的采用;epoll的支持对于java而言也是很重要的,在高并发的情况下nio是否采用epoll还是有挺大的差别的;而NPTL的采用对于多线程程序而言更是极为重要。

cP'b W5t,vl'x F5C0

(Kfpf.Tgm0另外需要关注像linux的File Handles是多少、network buffer是多少、MTU是多少、Memory Page size是多少等等。

#jM?+t'k#P}T!`0

j.\6f/pf Rw Z0JVM51Testing软件测试网M Q hB+c5TR

51Testing软件测试网P ]h7E SK

JVM调优的文章相对来说比较多,大家需要了解的主要是-Xms/-Xmx、并行GC、-XX:MaxPermSize/-XX:MaxNewSize、-XX:ThreadStackSize、NIO采用epoll等等。51Testing软件测试网3q#m"u,G1Y_ tN

51Testing软件测试网Gc0\ h'G Lhx

简单的列这两个,其实性能调优的手段还有非常的多,例如简单的增加CPU、买更快速度的硬盘、增加内存、提升网络带宽等这些从硬件角度下手的方式,还有像数据库调优、应用服务器调优等等。

L+i&@"J}|0

TAG:

 

评分:0

我来说两句

Open Toolbar