我想比较一下我所做的不同服务之间的响应时间。我听说过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,但它似乎不起作用。
所以:
答案 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秒时你应该使用另一种测量工具......无论如何有一个解决方案...