簡體   English   中英

Tomcat離開time_wait連接

[英]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.

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