软件性能测试中性能调优方法概述

上一篇 / 下一篇  2011-12-13 15:31:27 / 个人分类:性能测试

确定性能调优的目标
%C N1SSuq|yl1x051Testing软件测试网dvt9_JO7u
  性能调优,首先是要确定性能调优的目标是什么,如果现在
应用已经满足了需求,就没必要去做性能调优了,毕竟不经过一个系统的过程,其实是无法确定你所做的性能调整是否真的调优了性能,是否没有造成应用中其他的问题,所以确定性能目标是非常重要的,在定义性能目标的时候通常这么定义的呢:
v&D5?R-Wg;W;x051Testing软件测试网nY+NC1gH
  1、最大并发数51Testing软件测试网\7TpH7o`Su a

AK!?iK8tS0  2、Quality of Service51Testing软件测试网5r7BIkqJ'j~kt

p~ ]Q~0  服务的
质量,在软件系统方面我们认为主要表现在请求的出错率,系统的load等。51Testing软件测试网;`rFe"a
51Testing软件测试网t&bASG5Q
  3、最长响应时间
c5@.Mk6\M0
5[T ij^k0x1r4a:F0  对于任何请求所能承受的最大响应时间。
)jK GLA8YF(]3o-r/l^v0
Prb I)tIW7L0  4、TPS51Testing软件测试网w$P+iyD [4K4L

*I&W ]6S t bT0  每秒需要支持的最大事务数,最典型的指标是:“某
页面最高需要支撑每秒7000次的访问次数”。
i1f8|F-R KO)Rx E(UC+q1v051Testing软件测试网Y r-WhTD
  例如一个
web系统,需要定义出来的目标是:
L7u}A)F)G/y051Testing软件测试网|@j+Z&nH;lp7Eds
  并发目标:最高支撑200并发;
v-m2tW/J H[H5h051Testing软件测试网\@2ASM6n d
  QoS:出错率须控制在万分之一,系统的load最高只能到达10;
$Y"P)e"C QW051Testing软件测试网8b*Bl @F6n6s1T
  TPS:每秒完成7000次请求的处理;
$u\6Dl*y;zV~g#x3r051Testing软件测试网b#u @^es
  最大响应时间:最长允许的响应时间为5秒。
a;W4E}*u&m!Y0
jpn]v0  至于请求的平均响应时间这些就不在性能调优目标中定义,因为要达到TPS的要求,响应时间是必须要达到一个级别的,而且响应时间随着高并发是会出现劣化的。51Testing软件测试网9r ]p"BN,NRm
51Testing软件测试网0l+MFa&\r-l _
  当然,还可以把性能指标定到更为细节,例如某个方法的TPS在100并发时需要达到多少。51Testing软件测试网u.b&Lr;Q;|"g s
51Testing软件测试网L,zq~bP(I
  在确定好了性能目标后,重要的就是如何来测量系统的性能了。
P$r!tiZ0Z)x051Testing软件测试网r2@L-Wy,g'c(`
  测量系统性能51Testing软件测试网/}~2|g#e+D7j)J

!t-\Qm(QQ0  对于新系统而言,需要评估出其正式运行时的
数据量的增长情况;而对于已运行的系统,则需要根据监控获取到系统的运行数据(例如高峰并发数、系统的响应速度情况、系统的load、网络流量、每类请求在总的请求中所占的百分比等)。
~uvZ})c0对于新系统而言,要评估出具体的性能相对来说稍微好做一点,因为此时系统通常较为单纯,数据量的增长也不可能是一夜之间增长的,因此基本可以按照一种正常的方法在测试环境评估出其正式运行的性能。
9TN~:XK-n051Testing软件测试网4~ L6GIG k/u$Z#Y{v
  而对于已运行的系统而言,则较为麻烦,因为通常来讲要在测试环境中模拟正式运行环境基本是不太可能的,因此这个时候通常要采取一些模拟的方法或更高
压力的方法来尽量更为准确的评估出系统的性能。51Testing软件测试网\ TPJd+DC{
51Testing软件测试网9iSLH&E/l*n)y"] q
  在测试系统性能时,通常可采用的方法有:
_vY5\1bj4]051Testing软件测试网Hb*O4U w'i
  1、
单元测试;
P%k6ec3VW&^#P051Testing软件测试网 t4y } j F#J-cB3Pw_
  可借助单元测试来测试某个请求的性能;51Testing软件测试网LZ!^ }$GM

%Q1P8A4A w0  2、压力测试;
:m&X@%?J;W{uR;J \0
&|)jC1I `sW'O(GfIa0  压力测试无疑是测量系统性能中最常采用的方式,根据定义的性能目标对系统进行压力测试,以确定系统是否满足性能要求,同时也可以根据压力测试的结果来分析系统的瓶颈,进而进行对应的调优,可用于做压力测试的
工具还是不少的,像loadrunner、jmeter等等,不过压力测试这个话题实在太大了,不在这里展开去讲了,不过我也不怎么懂就是,呵呵。51Testing软件测试网 J oRy/S$u+Bb"_J

bV/`@ QCB\0  分析系统性能瓶颈
'? uU+w&UpFfz0
jgS*W7Rcc0  根据测量系统性能的结果,多数是可以分析出系统性能的瓶颈,同时还可以结合像jvm堆栈、jprofiler、系统日志等来进行进一步的确定,另外也可以根据性能调优人员的
经验,例如可以去了解开发人员是否采用了不适合的数据结构等。
_3F9utm*TU051Testing软件测试网 _ x C4@tu(q
  简单说一个线程分析的例子:
Or/pr0I d-Y:q;A0
{,_0U8~N k`0  借助kill -3 pid来获取到目前jvm的线程堆栈信息,特别需要关注的是里面wait for monitor这样的线程,这种线程是指在等待锁的线程,等待一两分钟后再次kill -3 pid,看看这些wait for monitor的线程的变化情况,这对于分析线程中是否存在不合理的竞争过高的锁的分析是非常重要的。
zD+K-{7Dg;oS_051Testing软件测试网-rH H KFNvq
  这一步无疑也是性能调优过程中最难的一步了,分析系统性能瓶颈这种基本只能结合实际例子来讲了,正确在后续抽取一两个例子来进行讲解。
F8u @O8b-Z N R051Testing软件测试网-^p8C-g!N om?%iE&j
  性能调优51Testing软件测试网Ph*h;KWrJ

E UsL4rb0m/AY0  在分析出系统性能的瓶颈后,其实这一步相对来说还好做些,当然,需要建立在对软硬件
知识都有很好的深入了解的基础上,在这里列举一些比较常见的性能调优的手段,多数是抄来或google来的,自己在这方面的经验还不多,希望大家多加指点,:)51Testing软件测试网,\ a+D {r!^4iA3sT5h D0Ea_
51Testing软件测试网-W ] {-P| DH3?.g yO
  Redhat
Linux内核
m/S}2jaP5C0M#]051Testing软件测试网 B#i4UwW6k$D!o
  Redhat linux内核版本升级到2.6,2.6和2.4的差别还是很多的,例如对epoll的支持、NPTL的采用;epoll的支持对于
java而言也是很重要的,在高并发的情况下nio是否采用epoll还是有挺大的差别的;而NPTL的采用对于多线程程序而言更是极为重要。51Testing软件测试网#s;c:LyW _ {,K
51Testing软件测试网/z WXO^5hr1Rf%@
  另外需要关注像linux的File Handles是多少、network buffer是多少、MTU是多少、Memory Page size是多少等等。
s^T$Y6eX(??051Testing软件测试网-cY:y.A(l V \A
JVM
7o9gP3] W(i3X5M{1@[)nRu0
!B,Y%|h(]&{u0  JVM调优的文章相对来说比较多,大家需要了解的主要是-Xms/-Xmx、并行GC、-XX:MaxPermSize/-XX:MaxNewSize、-XX:ThreadStackSize、NIO采用epoll等等。51Testing软件测试网2k|h%QV+Ei"F

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

TAG:

 

评分:0

我来说两句

Open Toolbar