我希望能够看到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;
}
我担心的是,我测量的是我的方法运行需要多长时间,而不是服务器响应该方法需要多长时间。有没有更好的方法来做这件事?
答案 0 :(得分:1)
关于使用currentTimeMillis()
的一点说明。事情发生了变化,但我发现millis只是每10毫升左右更新一次。要查看此内容,请尝试创建一个循环20次并使用Thread.sleep(1)
的测试类。您将看到相同的millis值大约10倍,然后它将变为另一个大约10毫米的值。使用nanoTime()
代替持续时间。
就您的问题而言,创建一个捕获时间并调用方法的测试类。不过,我怀疑你会看到很多不同。
答案 1 :(得分:1)
Dropwizard提供了您可以在JAX-RS资源方法上使用的@Timed
annotation:
@Timed
@GET
public List<Profile> getAllProfiles() {
List<Profile> profiles = profileDAO.getAllProfiles();
return profiles;
}
统计信息将在您的Dropwizard应用程序的管理上下文中提供,该应用程序通常在端口8081
上提供。