2017-05-30 55 views
0

包org.apache.http.impl.conn的HttpConnPool.class中的生存時間(TTL)變量是什麼?做?在HttpConnPool中設置生存時間或TTL後,虛擬服務器上的LoadTest會成功,但它有什麼作用?

我在虛擬服務器上運行了一些負載測試。當我每秒接近9個請求時。我得到了隨機NoHttpResponseException,目標未能響應或虛擬服務器未能響應。

然後我添加了一個名爲「TTL」或「TimetoLive」的屬性並給它一個值。 HttpResponseException停止產生。我想知道這個變量是如何防止NoHttpResponseException首先出現的。

回答

0

其實我自己也想出了答案。

在我的負載測試中,最初我們得到了「NoHttpResponseException,目標服務器@Somelink:PortNumber無法響應。」在loadtest期間,因爲httpClient維護持久連接,意味着同一個連接發送多個請求。這樣更有效率。有一個evictor線程,我們已經設置了一定的毫秒或秒。 evictor線程將在一定的毫秒後刪除空閒連接。在生產過程中,可能會出現空閒連接,因爲我們一直沒有交通。現在,在Load測試期間,由於我們始終將請求始終發送到客戶端服務器,因此連接不會空閒。因此,連接不會被驅逐,並且TTL屬性被設置爲默認值「-1」,這意味着無限(這對我的應用程序來說,對於每個應用程序而言都取決於開發人員設置的值)。

TTL是一個屬性,它定義連接必須處於活動狀態的時間長度,而不管它是否處於空閒狀態。如果該屬性設置爲「-1」,則連接將永遠保持活動狀態,或者至少在客戶端服務器關閉它之前保持活動狀態。客戶端服務器通常在一段時間後關閉連接。沒有服務器永遠保持連接。新的連接將始終建立。

在此期間,當客戶端關閉我們的連接時,我們的服務器將假定連接已建立,但客戶端未發送響應。因此它返回NoHttpResponseException,即目標服務器無法響應。添加TTL屬性將確保刪除任何持久連接,無論它是否處於空閒狀態。因此,我們將始終有一個防止NoHttpResponseException的新連接。

我希望這會有所幫助。

相關問題