使用Caliper来评估REST服务......或不?

时间:2012-02-27 17:41:21

标签: rest service benchmarking caliper

我想比较一下我所做的不同服务之间的响应时间。我听说过Caliper所以我决定以一种非常简单的方式使用它来调用它们,并使用类似的函数来测量它们:

public void timeCallingService(int reps) {
    String url = "http://localhost:8080/myservice/rest/"+size;
    for (int i = 0; i < reps; i++) {
        new Client(url);
    }
}

其中size是Caliper和Client的给定参数我编写的一个类,它只是调用服务并检查状态答案是否正常。

除了一些花费太多时间回答的服务外,一切都运行正常,所以我在Caliper中有错误:

Error: Runtime 1.06027641E11ns/rep out of range 0.1-1.0E10

我尝试使用一些参数,如warmupMillis和runMillis,但它似乎不起作用。

所以:

  1. 有什么简单的方法可以解决我的问题吗?
  2. 如果没有,我可以使用哪个基准框架进行比较,因为我不想要任何复杂的事实?

2 个答案:

答案 0 :(得分:3)

我为此道歉。 Caliper 0.5有一些像这样的怪癖,但我们正在工作的Caliper 1.0(a)对于它在这样的计时时所期望的内容不那么具有肛门保持性,(b)使得许多值可配置(例如时间间隔) ;如果MicrobenchmarkInstrument的逻辑对您不起作用,(c)还允许您插入不同的测量仪器。

不幸的是我不能保证发布日期。 :(

答案 1 :(得分:0)

TimeMeasurer.class中使用的Caliper(请参阅源TimeMeasurer.java第80-84行)限制了确定有效的可能时间。这种限制是lowerBound(0.1 ns)和upperBound(10 sec)。这就是为什么比upperBound更长的度量或比lowerBound更快的度量抛出RuntimeOutOfRangeException。因此,如果你真的坚持这一点,而不是尝试用另一个限制边界编译这个类,或者最好向caliper作者写这个并建议添加一个运行时参数,而不是(例如设置upperBound)。似乎(并且可能真的存在真相)这种测量工具用于在纳秒对分析起作用时测量快速过程。当你测量的东西超过10秒时你应该使用另一种测量工具......无论如何有一个解决方案...