2015-09-09 76 views
2

我在Undertow中使用Spring Boot(1.3.O.M5)。最近,我發現,當我在幾個小時後使用Undertow on Spring leaks connections

lsof -p $(pidof java) 

命令時,它給我看大約700線,其中大部分是建立客戶的TCP連接,儘管幾乎沒有人在進入頁面最近一小時(當我連接到該網站時,約5分鐘後我的連接消失了)。

很可能這是我的java.net.SocketException的來源:太多打開的文件 - 我每兩天(我要求重新啓動應用程序)才注意到過時的連接。我增加了系統中的最大打開文件限制,但顯然它似乎是一個短期解決方案。

我將不勝感激這個問題的幫助。謝謝!

+0

此外,具有setSessionTimeout(3)的UndertowEmbeddedServletContainerFactory bean沒有將會話超時縮短爲3秒。 server.session.timeout = 3:( –

+0

)什麼樣的連接?外部?到內部系統?找出連接以瞭解它正在發生的應用程序的哪部分。此外,會話超時用於HTTP會話和 –

+0

因爲我看到了這個屬性,所以我認爲這是它的意思,但它從來沒有受到過傷害,但是連接只是TCP連接到訪問該網站的設備上 –

回答

0

嘗試設置httpServerExchange.setPersistent(false);,它可以幫助我,當我遇到同樣的問題。是的 - 它會導致打開的文件太多錯誤,因爲它

1

暗潮沒有一個默認的連接超時,需要設置使用類似的東西超過文件描述符限制:

Undertow.builder().setServerOption(UndertowOptions.NO_REQUEST_TIMEOUT, 60000) 

這將告訴暗潮在60秒之後關閉連接而沒有來自客戶的請求。

+0

我剛剛在上游的Und ertow默認爲10分鐘,請參閱https://issues.jboss.org/browse/UNDERTOW-630 –

+0

我在Application.main中設置它,在我啓動SpringApplication之後...寫下這個,我意識到我可能應該在啓動應用程序之前已經完成了 - 但它不能運行ATM。在prod中啓動應用程序時,我有200個打開的文件,現在有600個打開的文件,大約有7個設備訪問該網站。 –