0

我想比较我所做的不同服务之间的响应时间。我听说过 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. 如果没有,鉴于我不想要任何复杂的事实,我可以使用哪个基准框架进行比较?
4

2 回答 2

3

我为此道歉。Caliper 0.5 有一些像这样的怪癖,但是我们正在工作的 Caliper 1.0 (a) 对于这样的计时时期望看到的内容,它的肛门保留较少,(b) 使许多值可配置(例如计时间隔; 您可以让它超过 1 秒),并且 (c) 如果 MicrobenchmarkInstrument 的逻辑不适合您,您还可以插入不同的测量仪器。

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

于 2012-02-28T03:17:52.783 回答
0

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

于 2013-02-15T07:56:25.443 回答