【问题标题】:Measure the amount of time it takes a server to respond to a GET request测量服务器响应 GET 请求所花费的时间
【发布时间】:2023-03-19 15:21:01
【问题描述】:

我希望能够查看 sql 数据库响应我的应用程序中的 get 方法需要多长时间。目前,我在方法运行前后使用 System.currentTimeMillis() 来测量:

public long responseTime(long start, long end) {
    long elapsed = end - start;
    return elapsed;
};

@GET
public getAllProfiles() {
    long start = System.currentTimeMillis();
    profileDAO.getAllProfiles();
    long end = System.currentTimeMillis();
    long elapsed = responseTime(start, end);
    return elapsed;
}

我担心的是,我正在测量我的方法运行需要多长时间,而不是服务器响应该方法需要多长时间。有没有更好的方法来做到这一点?

【问题讨论】:

  • 你看过间谍/调试驱动程序吗?例如media.datadirect.com/download/docs/connectsqlxml/jdbcug/spy.htm。警告 - 我已经很久没有使用这些了,不确定它们是否只是用于调试语句还是会给你时间。
  • 你可以使用 dynatrace,但我猜它是付费的。
  • 你从哪里收到服务器的结果?它是一个被改变的值,还是一个在服务器返回值时被调用的函数?
  • 如果您使用 Dropwizard,如标签所示,那么它已经具备您所需要的:dropwizard.io/1.3.1/docs/…
  • 代码无法编译。 getAllProfiles() 上缺少返回类型。 --- 您需要通过 REST 端点获取响应时间还是日志条目就足够了?如果是这样,我建议在profileDAO.getAllProfiles() 内进行基准测试并将时间写入日志。

标签: java dropwizard response-time


【解决方案1】:

关于使用currentTimeMillis() 的注意事项。事情发生了变化,但我发现毫秒仅每 10 毫秒左右更新一次。要看到这一点,请尝试创建一个循环 20 次并使用 Thread.sleep(1) 的测试类。您将看到相同的毫秒值大约 10 次,然后它将变为另一个大约 10 毫秒的值。使用 nanoTime() 代替持续时间。

就您的问题而言,创建一个捕获时间并调用您的方法的测试类。不过,我怀疑你会看到很大的不同。

【讨论】:

    【解决方案2】:

    Dropwizard 提供了可用于 JAX-RS 资源方法的 @Timed annotation

    @Timed
    @GET
    public List<Profile> getAllProfiles() {
        List<Profile> profiles = profileDAO.getAllProfiles();
        return profiles;
    }
    

    统计信息将在您的 Dropwizard 应用程序的管理上下文中可用,该应用程序通常在端口 8081 上提供服务。

    【讨论】:

      猜你喜欢
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 2021-06-07
      • 1970-01-01
      相关资源
      最近更新 更多