【发布时间】:2013-04-02 14:26:43
【问题描述】:
我正在编写一个针对 Web 应用程序运行的基准测试工具。我面临的问题是对服务器的第一个请求总是比后续请求花费更长的时间。 我在使用 apache http 客户端 3.x、4.x 和 Google http client 时遇到过这个问题。 apache http 客户端 4.x 显示出最大的不同(第一个请求大约比后续请求长 7 倍。对于 Google 和 3.x 大约长 3 倍。
我的工具必须能够用线程对并发请求进行基准测试。我不能使用一个实例,例如HttpClient 并从所有线程调用它,因为这会引发并发异常。因此,我必须在每个线程中使用一个单独的实例,它只会执行一个请求。这会极大地改变整体结果。
我不明白这种行为。我不认为这是由于服务器上的缓存机制造成的,因为 a) 所考虑的 web 应用程序没有使用任何缓存(据我所知)b) 这种效果在第一次请求 www.hostxy.com 时也是可见的,之后www.hostxy.com/my/webapp。
我分别在调用 client.execute(get) 或 get.execute() 之前和之后使用 System.nanoTime()。
有人知道这种行为的根源吗?这些httpclients自己做缓存吗?我将非常感谢任何提示。
【问题讨论】:
标签: java benchmarking apache-httpclient-4.x apache-httpcomponents