在我們的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內部是否有任何共享對象,我應該看看它是否超載越野車?