[英]tomcat leaves time_wait connection
我們將Apache Sever用作前端服務器,將Tomcat服務器用作后端。 前端客戶端是一個Java swing應用程序。 該協議是粗麻布的。
有時我們有很多小的要求。 當執行“ nestat -a”時,有許多TIME_WAIT連接,這些連接阻止服務器打開新連接。 只有與tomcat的連接似乎保持不變。 與apache的連接似乎已關閉。
我們正在使用重寫規則將請求轉發到tomcat
RewriteEngine On
RewriteCond %{REQUEST_URI} .*\.servlet.*$
RewriteRule ^/(.*)$ http://localhost:8080/$1 [P]
有任何想法嗎?
更新:
感謝您的建議 ,
但它仍然不起作用。 每個流都關閉,並且仍然有這些TIME_WAIT:
if (conn != null) {
try {
IOUtils.closeQuietly(conn.getInputStream());
} catch (IOException e) {
// do nothing
}
try {
IOUtils.closeQuietly(conn.getOutputStream());
} catch (Exception ex) {
// do nothing
}
try {
IOUtils.closeQuietly(((HttpURLConnection) conn).getErrorStream());
} catch (Exception ex) {
// do nothing
}
}
if (conn instanceof HttpURLConnection) {
((HttpURLConnection) conn).disconnect();
}
發出請求時,很可能您沒有在Swing應用程序中關閉輸入/輸出流。 從這里 :
如果結果是InputStream,則將InputStream.close()放在finally塊中非常重要,因為在讀取所有數據並且關閉輸入流之前,Hessian不會關閉基礎HTTP流。
TIME_WAIT
是最近關閉的連接的正常狀態,它將在其中保留一段內核定義的超時時間。 您已從應用程序方面盡了一切可能。
如果您的連接閃爍太快並且遇到可用端口不足的情況,則可以調整系統對它們的回收利用。 大量的TIME_WAIT連接提供了Linux以及基本理論的概述, 針對TCP / IP性能調整Windows列出了與Windows有關的參數,其中有很多breifer解釋。
不是Tomcat,而是您的操作系統。
操作系統將在TIME_WAIT中保留連接,以避免因端口重用太快而造成干擾。 想象一下,舊連接的數據包到達時晚了,而新連接在同一端口中打開了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.