在不同负载的机器上运行性能测试

时间:2011-08-15 15:17:06

标签: java performance testing

我的JUnit套件中有一个测试,它警告我性能下降。测试按照以下方式进行:通常,我每秒可以运行100'000次操作,但构建服务器上的负载可能会有所不同,所以我对任何事情感到满意> 25'000。

今天,构建以24'300 ops / s失败。当我使用Java 7(rc1,调试风格)运行测试时,我得到了5'000 ops / s。前者是好的,后者是测试必须抓住的红旗。

现在简单的解决方案是将我的目标降低到20'000,但我想知道如果机器可以负载,是否有更好的方法来定义性能测试的“安全范围”。

3 个答案:

答案 0 :(得分:1)

我会不止一次地运行测试(例如,取11个结果并检查中位数,忽略性能的突然下降),或者在更长的时间内,这样你就可以得到更一致的结果。如果您无法控制服务器的负载,您可以在unix框上获得负载,并在确定合理范围时将其考虑在内。

答案 1 :(得分:1)

纯粹的ops / s数字孤立无意义。如果机器上的负载可能导致5倍的变化(100k低至20k),那么我肯定会掩盖应用程序行为的重大变化。

我认为你反复测试性能变化的理念是一个值得称道的想法,但除非你有一个可靠的平台,否则我不知道如何实现它。

我想您可以尝试衡量整体平台利用率并相应地调整您的测试结果,但可靠的模型肯定需要相当多的开发。

答案 2 :(得分:0)

不是测量挂钟时间,而是通过ThreadMXBean测量CPU时间。如果您希望支持50k ops /秒,那么每个操作都应该采用< 20,000纳秒。

我不知道是否可以通过这个bean访问垃圾收集器线程。如果没有,您需要通过GarbageCollectorMXBean

获取执行时间