繁体   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