2012-06-11 45 views
0

在我們的prod服務器中,每隔一段時間,對外部服務的請求都會開始超時和失敗。這之前是短時間的高響應時間。有趣的是,我們有一組相同的服務器調用相同的服務(Apple Purchase和/或Facebook),並且只有一個節點遭受漫長的響應時間。因此,它不僅僅是服務速度緩慢。這個問題很少見,很難再現,但仍然非常重要。Jetty HttpExchange超時所有請求?

節點上的線程數和內存數量看起來很好,只有超時纔有例外。重新啓動Java進程將不可避免地解決這個問題。

看起來我們的響應時間圖表顯示,如果外部服務實際上很慢一段時間,但恢復了一些節點仍然看到該節點處於關閉狀態。這只是一個猜測,因爲緩慢的響應時間可能只是我們方面的bug的一個功能。

我在下面添加了代碼摘錄,我們爲每個請求創建一個新的交換對象,所以我相當肯定沒有錯誤的數據緩存。

public void doSomething() { 
    HttpExchange httpExchange = new HttpExchange(); 
    httpExchange.setURL("SOME_URL"); 
    httpExchange.setMethod("GET"); 
    httpExchange.setEventListener(listener); 
    httpExchange.setTimeout(this.timeout); 
    this.client.send(httpExchange); 
} 

有沒有人看到與Jetty HttpClient類似的問題? 是否有任何已知的邊緣情況可以導致Jetty Http客戶端以這種方式表現?
Jetty內部是否有任何共享對象,我應該看看它是否超載越野車?

回答

0

僅供參考,我在網站上發佈了一個Bug Tracking,我們終於有了一套很好的重現性,解決方法和解決方案。

但是對於平均時間的修復「我目前通過在我的.onExpire()事件處理函數中調用HttpExchange.cancel()來解決這個問題。你能測試這個修復嗎?」 - 西蒙斯看到Bug Tracking