我正在編寫基準測試工具以針對Web應用程序運行。我面臨的問題是,對服務器的第一次請求總是比後續請求花費更長的時間。 我遇到了這個問題與Apache的HTTP客戶端3.x,4.x和Google http client。 apache http client 4.x顯示出最大的區別(第一次請求比後續時間大7倍,對於Google和3.x,它大約延長了3倍)Java - 首先向特定主機發送http請求的速度明顯較慢
我的工具必須能夠對同時發生的請求進行基準測試我不能使用例如HttpClient的一個實例並從所有線程中調用它,因爲這會引發一個Concurrent異常,因此我必須在每個線程中使用一個單獨的實例,它將只執行一個請求。我認爲這不是由於服務器上的緩存機制造成的,因爲a)考慮中的webapp沒有使用任何緩存(據我所知)和b )這個效果在第一次重放時也是可見的查詢www.hostxy.com和www.hostxy.com/my/webapp。
我分別在調用client.execute(get)
或get.execute()
之前和之後立即使用System.nanoTime()。
有沒有人有這種行爲源於何處?這些httpclient本身是否執行任何緩存?我會非常感謝任何提示。
我試着禁用保持活着,但我不知道我是否成功。不過,如果我在後續請求之間等待25秒,也會發生差異 - 此時應該發生保持活動超時,不應該嗎?我也不明白爲什麼apache http客戶端4.x需要比3.x – feob
嗯。如果我是你,我會掏出Wireshark,看看線路上發生了什麼。另外,請閱讀有關HttpClient的PoolingClientConnectionManager。這可能會給你一個關於如何完全避免這個問題的想法 –