我正在编写一个针对 Web 应用程序运行的基准测试工具。我面临的问题是对服务器的第一个请求总是比后续请求花费更长的时间。 我在 apache http 客户端 3.x、4.x 和 Google http client 上遇到过这个问题。 . apache http 客户端 4.x 显示出最大的差异(第一个请求比后续请求花费的时间大约长 7 倍。对于 Google 和 3.x,它大约长 3 倍。
我的工具必须能够对线程的同时请求进行基准测试。我不能使用一个实例HttpClient 并从所有线程调用它,因为这会引发并发异常。因此,我必须在每个线程中使用一个单独的实例,它只会执行一个请求。这会显着改变整体结果。
我不理解这种行为。我不认为这是由于服务器上的缓存机制造成的,因为 a) 正在考虑的 webapp 不使用任何缓存(据我所知)和 b) 这种效果在第一次请求 www.hostxy.com 和之后也是可见的www.hostxy.com/my/webapp。
我分别在调用 client.execute(get)
或 get.execute()
之前和之后立即使用 System.nanoTime()。
有谁知道这种行为从何而来?这些 httpclients 自己做任何缓存吗?如果有任何提示,我将不胜感激。
最佳答案
阅读:http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html用于连接池。
您的第一个连接可能需要最长的时间,因为它是一个 Connect: keep-alive 连接,因此一旦建立连接,后续连接就可以重用该连接。这只是一个猜测
关于Java - 对特定主机的第一个 http 请求明显较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15766719/