簡體   English   中英

與Jetty的TIME_WAIT連接過多

[英]Too many TIME_WAIT connections with Jetty

我正在10個不同的服務器上運行API,所有這些服務器都位於防火牆后面。 我正在使用碼頭8來滿足所有http請求。 該API的用例是短暫的連接。

幾個月前,我開始隨機出現Too many open file descriptors錯誤。 這些錯誤使服務器完全沒有響應,我需要重新啟動碼頭服務器才能修復該問題。 今天,這一天發生0到10次,具體取決於我獲得的流量。

經過一些調查,我注意到我耗盡了可用連接的數量,因為所有連接都停留在TIME_WAIT狀態,因此無法創建新連接。

ss -s

TCP:   13392 (estab 1549, closed 11439, orphaned 9, synrecv 0, timewait *11438*/0), ports 932

在此示例中,處於TIME_WAIT狀態的連接數量非常少,但最多可以達到50k。

我一直在嘗試幾次內核調整,並且還嘗試將Jetty套接字的SO_LINGER計時器設置為1秒。 所有這些更改有助於降低頻率,但我仍然經常出現錯誤。

還值得一提的是,我在每台服務器上每秒接收大約3k個請求,而CPU的使用率非常低。 今天擴展我的流量的瓶頸是此連接問題。

有人知道我該怎么做才能正確處理嗎?

“打開的文件描述符太多”可能是由於應用程序中的資源泄漏引起的。

TIME_WAIT狀態是由最先發送關閉的一端而不是最先收到關閉的一端引起的。 您可能需要重新考慮您的應用程序協議,以便首先關閉客戶端。 這並不難安排。 例如,如果使用客戶端連接池,它將完全免費。

這兩個條件無關。 TIME_WAIT狀態只能在套接字已關閉的端口上發生。 它不會導致“打開文件描述符過多”的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM