今天了解了一下Grinder,与Jmeter类似的是,它是一个Java开发的开源压力测试工具,提供的功能也比较丰富,而且简洁。
看到网上有描述这个工具的性能要比Jmeter好,不禁好奇想要做一些测试对比。
基于简单的代码进行测试,10并发时Jmeter的tps是30978/s,而grinder则为400000/s,相差约10倍。
不过作为Jmeter一年多的忠实用户,我还是不免想要分析一下这个数据:
1.Jmeter与Grinder都使用Java语言开发,不可能出现实质的性能差别,主要区别在于Jmeter是图形化配置与操作的(为了查看结果,我不得不如此做),配置了聚合报告占用了大部分时间;
2.将聚合报告禁用则可直接提升效率数倍,这点可以从禁用后Jmeter的日志中得出;
3.我也想通过将结果写入到文件来避免图形化显示,不过很遗憾,Jmeter将结果写入到文件的效率确实很低,还不如图形化显示。
4.鉴于对Jmeter一直以来的使用,万级别以上的TPS加上分布式支持基本可以适应任何场景的性能测试,这个点我也决定不再深入去挖掘了,而且现在我们实际使用的是针对Jmeter进行过二次开发的版本,其聚合报告已经使用自己写的聚合数据收集器代替,其性能取决于收集器的性能;
5.归根结底,Jmeter的性能也好、Grinder的性能也好,都是Java语言的性能,具体他们的表现如何,取决于他们为我们做了多少事情。当某些事情不是我们所需要的,而且又成为其瓶颈的时候,这个工具就需要改造或者说不适合我们了!现在看来,Jmeter提供的东西是很多的,而其瓶颈在工作中远远没有显现出来。
下面是测试代码:
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult results = new SampleResult();
results.sampleStart();
Sampler s=new Sampler();
s.test();
results.sampleEnd();
results.setSuccessful(true);
return results;
}
class Sampler {
public void test() {
return;
}
}