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