........................

【转】【case study】Java性能测试脚本排查方法

上一篇 / 下一篇  2013-05-23 17:31:00

一、为什么我Eclipse中调试正常,Jmeter中找不到对应的Sampler呢?

找不到对应的Sampler,说明你在Eclipse中所编写的代码编译后,Jmeter不能【完整找到】,这个完整找到,包括以下三个部分的内容:

1.     请查看你编译后拷贝至jmeterlib/ext目录下的jar包,是否包含你所编写的class文件;

2.     请查看你编译后拷贝至jmeterlib/ext目录下的jar包,是否包含你的bean配置文件;

3.     Eclipse工程所依赖的Jar包,是否全部拷贝至了jmeterlib/ext目录下?

4.     请检查Jmeter命令窗口,是否有错误日志,如方法未找到,类未找到或配置文件未找到等信息;

5.     请检查Jmeterbin目录下jmeter.log文件中,是否有错误日志,如方法未找到,类未找到或配置文件未找到,空指针异常等信息;

特别注意

1)由于写接口测试的同学经常会把测试代码写在test/java中,配置文件放在test/resources中,这些代码maven是不会打包的,这是maven的默认规则,必须放在main/javamain/resources目录中才能打包到目标jar包中。

2)多拷贝的jar包中存在相同类的不同版本时(比如多个版本的javaassistdubbo等),由于类加载顺序的原因,可能jmeter加载的那个类刚好是不正确的版本,也会出现类找不到或方法找不到之类的异常信息,因此出现此类异常一方面是没有找到jar包,另一方面是加载了错误版本的jar包。

二、我如何在执行Jmeter时,使用Eclipse中的代码进行Debug

在问题一实在找不到线索的情况下,相信大家都有一种冲动,就是希望能够看到Eclipse中的一行行代码,在Jmeter中是如何执行的,因此各种getLogger()System.out.println()语句夹杂在测试代码中,但过多日志影响性能不说,一来不回的编译,拷贝,重启Jmeter也成本很大,这里给大家提供一个方法——远程Debug

Jmeter是使用Java语言编译的程序,其启动与其它任何Java程序一样,就是一个main函数。因此可以通过给JmeterJVM传递参数的方式使之开启Debug端口,然后使用Eclipse的远程Debug进行调试,如Jmeter.bat文件中添加JVM启动参数:

-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n

此后再启动Jmeter,便可以通过远程连接其8787端口的方式进行远程debugEclipse中设置如下:

有了这个杀手锏,相信大家在排查JmeterEclipse代码表现不一样的问题时,能够解决绝大部分的问题。

三、Jmeter执行时抛如下异常

这说明我们拷贝的jar包太多了,jmeter装不下,所以报内存溢出了,办法有2个,一是加大jmeter的内存,二是少拷贝一些没有使用到的jar包。

加大Jmeter内存是修改jmeter.bat文件(Linux中是jmeter文件),主要有2个参数需要注意:

PERM=-XX:PermSize=128m -XX:MaxPermSize=128m

这是设置类加载所在区域内存大小的参数,必须加大

HEAP=-Xms512m -Xmx512m

这是设置总大小的参数,也一并加大

 


TAG:

 

评分:0

我来说两句

Open Toolbar