........................
【转】【case study】Java性能测试脚本排查方法
上一篇 /
下一篇 2013-05-23 17:31:00
一、为什么我Eclipse中调试正常,Jmeter中找不到对应的Sampler呢?
找不到对应的Sampler,说明你在Eclipse中所编写的代码编译后,Jmeter不能【完整找到】,这个完整找到,包括以下三个部分的内容:
1. 请查看你编译后拷贝至jmeter的lib/ext目录下的jar包,是否包含你所编写的class文件;
2. 请查看你编译后拷贝至jmeter的lib/ext目录下的jar包,是否包含你的bean配置文件;
3. Eclipse工程所依赖的Jar包,是否全部拷贝至了jmeter的lib/ext目录下?
4. 请检查Jmeter命令窗口,是否有错误日志,如方法未找到,类未找到或配置文件未找到等信息;
5. 请检查Jmeter的bin目录下jmeter.log文件中,是否有错误日志,如方法未找到,类未找到或配置文件未找到,空指针异常等信息;
特别注意
1)由于写接口测试的同学经常会把测试代码写在test/java中,配置文件放在test/resources中,这些代码maven是不会打包的,这是maven的默认规则,必须放在main/java和main/resources目录中才能打包到目标jar包中。
2)多拷贝的jar包中存在相同类的不同版本时(比如多个版本的javaassist或dubbo等),由于类加载顺序的原因,可能jmeter加载的那个类刚好是不正确的版本,也会出现类找不到或方法找不到之类的异常信息,因此出现此类异常一方面是没有找到jar包,另一方面是加载了错误版本的jar包。
二、我如何在执行Jmeter时,使用Eclipse中的代码进行Debug?
在问题一实在找不到线索的情况下,相信大家都有一种冲动,就是希望能够看到Eclipse中的一行行代码,在Jmeter中是如何执行的,因此各种getLogger()和System.out.println()语句夹杂在测试代码中,但过多日志影响性能不说,一来不回的编译,拷贝,重启Jmeter也成本很大,这里给大家提供一个方法——远程Debug。
Jmeter是使用Java语言编译的程序,其启动与其它任何Java程序一样,就是一个main函数。因此可以通过给Jmeter的JVM传递参数的方式使之开启Debug端口,然后使用Eclipse的远程Debug进行调试,如Jmeter.bat文件中添加JVM启动参数:
-Xdebug
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
此后再启动Jmeter,便可以通过远程连接其8787端口的方式进行远程debug,Eclipse中设置如下:
有了这个杀手锏,相信大家在排查Jmeter和Eclipse代码表现不一样的问题时,能够解决绝大部分的问题。
三、Jmeter执行时抛如下异常
这说明我们拷贝的jar包太多了,jmeter装不下,所以报内存溢出了,办法有2个,一是加大jmeter的内存,二是少拷贝一些没有使用到的jar包。
加大Jmeter内存是修改jmeter.bat文件(Linux中是jmeter文件),主要有2个参数需要注意:
PERM=-XX:PermSize=128m
-XX:MaxPermSize=128m
这是设置类加载所在区域内存大小的参数,必须加大
HEAP=-Xms512m
-Xmx512m
这是设置总大小的参数,也一并加大
收藏
举报
TAG: