2011-04-23 70 views
4

我使用Apache HttpClient以大約20個POST請求/秒的速度在本地主機上查詢HTTP/1.0(不保持活動狀態)服務器。我有這樣啓用TCP_NODELAY:Apache HttpClient在高請求/秒下的隨機延遲


val httpParams = new BasicHttpParams() 
HttpConnectionParams.setTcpNoDelay(httpParams, true) 
val client = new DefaultHttpClient(connectionManager, httpParams) 
 

儘管如此,每分鐘幾次我看到的10-200毫秒發送這樣的請求隨機延遲(在服務器上顯示測量,即延遲在發送)。我檢查了一下,這不是垃圾收集器暫停。可能是什麼問題?

我試圖用C++客戶端以相同的速率查詢服務器,並沒有這種隨機延遲,所以我認爲這是HttpClient問題。

更新: 我檢查了jetty HttpClient實現,它有同樣的問題。這可能是FreeBSD上的JVM的一些問題嗎?我應該在linux上測試這個,但我手邊沒有linux服務器。

+0

允許連接到目標主機的連接數量?你調整了這個參數嗎? – MJB 2011-04-24 23:36:42

+0

它總是一個連接(由互斥體控制)。 – Michael 2011-04-27 23:32:52

+0

你嘗試禁用'http.connection.stalecheck'嗎?它只應該是10-30毫秒的延遲,但可能更多是由於DNS到期或其他一些複雜因素。 – Barett 2017-02-02 20:36:01

回答

2

我在這裏使用Windows有同樣的問題。 在我的情況下,HttpClient引入了大約1秒的延遲,但只是第一次嘗試執行一個帖子(我按順序做了幾次)。我嘗試了一種解決方法,即爲本地主機創建一個「假」帖子並執行它(除了IOException)。通過這樣做,我致電真實服務的延遲從大約1秒減少到大約100毫秒。 我還沒有提高。

+0

這是另一個bug,你應該禁止等待100-繼續: – Michael 2011-05-08 04:26:09