j2ee性能调优之最小化资源压力测试法则
上一篇 / 下一篇 2009-09-29 00:28:44 / 个人分类:性能测试
来源:中国IT实验室
'Qc9_ H8C0
aS8A%v:[S0 摘要:我提倡使用最小化资源的方式做一次压力测试,排除大部分浅显的应用问题。最小资源的意思,即在pc环境,使用应用可以运行的最小资源状态下,进行压力测试和性能问题侦测的工作。
/QP,aS|v0
6@W:yv#DwB+{+A0 前面看到有人讲j2ee的性能调优,虽然这块不是自己的专长,但是猪养多了,也忍不住跳出来说几句。
i8td4s1PLM[0 51Testing软件测试网/I9]6M8qVw)P#V1Q
虽然几乎每本讲性能调优的书籍开篇都会提,没必要的情况下就不要做调优,但是我个人还是认为,所有系统在上线前,都应该做一次基本的压力测试并对相关的性能问题进行检测, 但是迫于资源压力,很多项目都无法做正规的压力测试,一直到系统上线出现问题,才倒回来找原因。 而正规的压力测试,往往因为需要严格模拟生产环境,需要耗费大量的资源,各类专家配合解决问题,并不是那么轻松的可以做下来的。
$uf&rH KUhpT6[0
rs2n4bMBH0 而j2ee应用的特点就是以复杂性来回避传统问题,所以任意一个j2ee的部署,相对于php那样的结构都是比较复杂的。系统一旦发生性能问题,必须在程序、数据库、应用服务器、jvm、操作系统几大块中交叉进行考虑,根据实际情况问题,问题的原因可能异常复杂。我们可以想象一个项目,从来不做UT不做IT ,只做一次UAT,然后直接提交给用户上线以后,修补错误的困难度和成本。51Testing软件测试网&wC2LV4Z4V v.M1P
51Testing软件测试网"V_|9S%Kf4f4M?[
经常看到一些调优的最后解决方案,可以肯定,几乎80%以上都是一些低级的程序错误导致的,剩下的20%虽然可能是用硬件,os参数调整等等问题解决了,但是其中很大一块,归根到底也是程序的问题。 而在我们回顾这些错误的时候可以很惊人的发现,大部分都是一些低级错误。
r;_[:M8E8C/X}6e0
ox?M\0 我提倡使用最小化资源的方式做一次压力测试,排除大部分浅显的应用问题。最小资源的意思,即在pc环境,使用应用可以运行的最小资源状态下,进行压力测试和性能问题侦测的工作。这种做法的优点如下。
d(`IE/R0
-C"r)G$g6_]pC'`Qt0 1. 环境容易搭建, 特别是不需要考虑大型硬件和网络条件等等,也回避了开发人员可能不熟悉unix和特定应用服务器等问题51Testing软件测试网 W{ M6Sx;H/~
'N+n w0]-j-HqZ G0S0 2. 不需要特别的数据库,操作系统和应用服务器专家配合,开发人员自身即可完成。
-p9f.SPl#?,Y7E3[3P0
+I8B%w;mC0 3. 不需要特别的依赖os和应用服务器,jvm的监测工具。选择自己最熟悉的即可。
bVh@[3y']#|M0
TjcWW } si0 4. 开发人员在熟悉这种过程以后,再转到正式的生产环境工作时也更有经验,更容易解决问题。51Testing软件测试网9P9t@;fJ:Ek
51Testing软件测试网;l ~$e,u-^vy3A
对测试过程做一点简单介绍。51Testing软件测试网c;G @I[3W"^S
?.T$q[zi9D0 工具准备:
YH9W`)c0
m!P%MOwzB0 得益于开源技术的发展,大部分工具都可以免费获得,使用也比较简单。51Testing软件测试网hXf fKJ4a
qZ/h(A/M)^0 1. jvm 监控: 对jvm的运行状态进行分析, 可以使用jvm自身带的特性输出日志,结合hp的jmeter profile进行分析。也可以使用jrockit自带的图形化工具mession control。
S+e3o2YG hw0 51Testing软件测试网 o.Q LB`n0K
熟悉什么用什么,越简单越好,目的主要是观察内存堆的变化,线程资源变化,gc情况等。51Testing软件测试网2AD~y5k
51Testing软件测试网 T7Py'Z:_jYKZ
2. 数据库监控工具: 熟悉数据库的使用数据库自身的特性,不熟悉的可以使用第三方工具,主要目的是观察数据库的锁,连接数信息, 对于db2我比较喜欢使用quest central。 oracle使用OEM或者自身的数据字典已经可以。51Testing软件测试网s'SRRk `L
51Testing软件测试网Ec1u fn
3. 应用服务器监控: 主要目的是记录方法的调用情况和执行时间 ,找出频繁调用的方法和执行时间过长的方法。使用jprobe和jprofile都可以很轻松的做到。 如果使用的应用服务器比较偏门,那么可以换一个支持这种检测工具的应用服务器。反正主要目的只是在找问题。
0Kh!lr6m6mw9Bn0 51Testing软件测试网}"n!J$hxyO ih
4. sql执行监控:跟踪找出执行时间过长的sql。 我喜欢使用p6spy。
u-t6IguaR&a0
&z'W(J,z5^a_BC0 5. 压力工具: jmeter+badboy , 有条件的可以用loadrunner, 和loadrunner近似的还有一个免费的开源产品。 另外web 应用的话, 也可以使用selenium这样的ff扩展来做。微软vs自带的也不错,反正是什么简单用什么。51Testing软件测试网cBl cF
7I.m]%pQ#Jr2r&B0 6. 记录表格: 对问题和资源配置的变更进行记录和对比。
7qa~2Hu2d`@0 51Testing软件测试网1UL4TOe,h?3p
我发现有些人做压力测试,只用压力工具来跑,不肯用各类proile工具来跟踪应用和数据库使用情况,加上经验又不足,结果测来测去都是瞎猜。
'Qc9_ H8C0
aS8A%v:[S0 摘要:我提倡使用最小化资源的方式做一次压力测试,排除大部分浅显的应用问题。最小资源的意思,即在pc环境,使用应用可以运行的最小资源状态下,进行压力测试和性能问题侦测的工作。
/QP,aS|v0
6@W:yv#DwB+{+A0 前面看到有人讲j2ee的性能调优,虽然这块不是自己的专长,但是猪养多了,也忍不住跳出来说几句。
i8td4s1PLM[0 51Testing软件测试网/I9]6M8qVw)P#V1Q
虽然几乎每本讲性能调优的书籍开篇都会提,没必要的情况下就不要做调优,但是我个人还是认为,所有系统在上线前,都应该做一次基本的压力测试并对相关的性能问题进行检测, 但是迫于资源压力,很多项目都无法做正规的压力测试,一直到系统上线出现问题,才倒回来找原因。 而正规的压力测试,往往因为需要严格模拟生产环境,需要耗费大量的资源,各类专家配合解决问题,并不是那么轻松的可以做下来的。
$uf&rH KUhpT6[0
rs2n4bMBH0 而j2ee应用的特点就是以复杂性来回避传统问题,所以任意一个j2ee的部署,相对于php那样的结构都是比较复杂的。系统一旦发生性能问题,必须在程序、数据库、应用服务器、jvm、操作系统几大块中交叉进行考虑,根据实际情况问题,问题的原因可能异常复杂。我们可以想象一个项目,从来不做UT不做IT ,只做一次UAT,然后直接提交给用户上线以后,修补错误的困难度和成本。51Testing软件测试网&wC2LV4Z4V v.M1P
51Testing软件测试网"V_|9S%Kf4f4M?[
经常看到一些调优的最后解决方案,可以肯定,几乎80%以上都是一些低级的程序错误导致的,剩下的20%虽然可能是用硬件,os参数调整等等问题解决了,但是其中很大一块,归根到底也是程序的问题。 而在我们回顾这些错误的时候可以很惊人的发现,大部分都是一些低级错误。
r;_[:M8E8C/X}6e0
ox?M\0 我提倡使用最小化资源的方式做一次压力测试,排除大部分浅显的应用问题。最小资源的意思,即在pc环境,使用应用可以运行的最小资源状态下,进行压力测试和性能问题侦测的工作。这种做法的优点如下。
d(`IE/R0
-C"r)G$g6_]pC'`Qt0 1. 环境容易搭建, 特别是不需要考虑大型硬件和网络条件等等,也回避了开发人员可能不熟悉unix和特定应用服务器等问题51Testing软件测试网 W{ M6Sx;H/~
'N+n w0]-j-HqZ G0S0 2. 不需要特别的数据库,操作系统和应用服务器专家配合,开发人员自身即可完成。
-p9f.SPl#?,Y7E3[3P0
+I8B%w;mC0 3. 不需要特别的依赖os和应用服务器,jvm的监测工具。选择自己最熟悉的即可。
bVh@[3y']#|M0
TjcWW } si0 4. 开发人员在熟悉这种过程以后,再转到正式的生产环境工作时也更有经验,更容易解决问题。51Testing软件测试网9P9t@;fJ:Ek
51Testing软件测试网;l ~$e,u-^vy3A
对测试过程做一点简单介绍。51Testing软件测试网c;G @I[3W"^S
?.T$q[zi9D0 工具准备:
YH9W`)c0
m!P%MOwzB0 得益于开源技术的发展,大部分工具都可以免费获得,使用也比较简单。51Testing软件测试网hXf fKJ4a
qZ/h(A/M)^0 1. jvm 监控: 对jvm的运行状态进行分析, 可以使用jvm自身带的特性输出日志,结合hp的jmeter profile进行分析。也可以使用jrockit自带的图形化工具mession control。
S+e3o2YG hw0 51Testing软件测试网 o.Q LB`n0K
熟悉什么用什么,越简单越好,目的主要是观察内存堆的变化,线程资源变化,gc情况等。51Testing软件测试网2AD~y5k
51Testing软件测试网 T7Py'Z:_jYKZ
2. 数据库监控工具: 熟悉数据库的使用数据库自身的特性,不熟悉的可以使用第三方工具,主要目的是观察数据库的锁,连接数信息, 对于db2我比较喜欢使用quest central。 oracle使用OEM或者自身的数据字典已经可以。51Testing软件测试网s'SRRk `L
51Testing软件测试网Ec1u fn
3. 应用服务器监控: 主要目的是记录方法的调用情况和执行时间 ,找出频繁调用的方法和执行时间过长的方法。使用jprobe和jprofile都可以很轻松的做到。 如果使用的应用服务器比较偏门,那么可以换一个支持这种检测工具的应用服务器。反正主要目的只是在找问题。
0Kh!lr6m6mw9Bn0 51Testing软件测试网}"n!J$hxyO ih
4. sql执行监控:跟踪找出执行时间过长的sql。 我喜欢使用p6spy。
u-t6IguaR&a0
&z'W(J,z5^a_BC0 5. 压力工具: jmeter+badboy , 有条件的可以用loadrunner, 和loadrunner近似的还有一个免费的开源产品。 另外web 应用的话, 也可以使用selenium这样的ff扩展来做。微软vs自带的也不错,反正是什么简单用什么。51Testing软件测试网cBl cF
7I.m]%pQ#Jr2r&B0 6. 记录表格: 对问题和资源配置的变更进行记录和对比。
7qa~2Hu2d`@0 51Testing软件测试网1UL4TOe,h?3p
我发现有些人做压力测试,只用压力工具来跑,不肯用各类proile工具来跟踪应用和数据库使用情况,加上经验又不足,结果测来测去都是瞎猜。