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