0

我创建了一个使用 XML 的简单休息服务 POST 方法。我用 Jersey 创建了一个 REST 客户端并创建了我的对象,我试图通过增加我的 XML 长度、为我的对象提供更大的输入来查看响应时间的变化。比如说,我的对象占用了一个简单的员工详细信息,我会增加。我看到响应时间不一致地变化,根据我的观察,它不依赖于 xml 的大小。我正在计算所花费的时间如下。

long startTime = System.currentTimeMillis();

// enter code here for post `

long elapsedTime = System.currentTimeMillis() - startTime;

请建议是否有更好的方法。

在这里我想澄清的是我的服务器在本地主机中,为什么响应时间会发生变化(比如一次是 88 毫秒,另一次是 504 毫秒)。我期望的是,当我向我的 xml 对象提供更大的输入时它应该会增加,但我观察到的情况并没有发生。请澄清或指出我可以阅读相同内容的更好的网站或书籍。

4

2 回答 2

0

请注意,您的问题非常广泛(并且可能会因此关闭)。我的解释同样广泛,只是为了给你一些背景知识,说明你为什么看到你所看到的行为。

考虑到您高达数百毫秒,您测量时间的方式在这里不太可能有很大的不同。您调用的网站更有可能有时需要更长的时间才能响应。

将其与您在 Google 中输入搜索查询时看到的内容进行比较可能会有所帮助。有时响应会“立即”弹出,但有时需要一些时间才能加载。由于每次搜索都使用相同的浏览器,因此不可能是浏览器造成差异。

相反,Web 服务中的某些内容可能在调用之间有所不同。在 Google 搜索示例中,您可能会被路由到不同的 Google 服务器,服务器可能使用不同的存储进行搜索,查询可能会在某个时候被缓存,等等。

因此,无法仅通过查看客户端代码来确定调用之间的性能为何不同。相反,您应该查看服务器代码并分析不同调用发生的情况。

于 2014-07-03T13:17:26.613 回答
0

使用 System.nanoTime 代替 currentTimeMillis;还请注意,Java 会即时优化,如果您不先预热服务器,那么您将计时解释执行字节码,然后在某些时候它会翻转为本机字节码。时间会因输入长度而异(在类似函数的步骤中),但在看到之前您需要克服一定量的噪音。很多来自 GC,很多来自线程调度和操作系统问题。

我推荐机械同情小组讨论这类事情。关于如何测量这些类型的系统有很多讨论。 https://groups.google.com/forum/#!forum/mechanical-sympathy

于 2014-07-03T08:50:50.677 回答