Java tomcat离开time\u等待连接
我们使用Apache服务器作为前端服务器,使用Tomcat服务器作为后端服务器。前端客户端是一个JavaSwing应用程序。协议是黑森协议 有时候我们会收到很多小请求。在执行“nestat-a”时,等待连接的时间很长,这会阻止服务器打开新连接。只有与tomcat的连接似乎保持不变。与apache的连接似乎已关闭 我们使用重写规则将请求转发给tomcatJava tomcat离开time\u等待连接,java,apache,tomcat,Java,Apache,Tomcat,我们使用Apache服务器作为前端服务器,使用Tomcat服务器作为后端服务器。前端客户端是一个JavaSwing应用程序。协议是黑森协议 有时候我们会收到很多小请求。在执行“nestat-a”时,等待连接的时间很长,这会阻止服务器打开新连接。只有与tomcat的连接似乎保持不变。与apache的连接似乎已关闭 我们使用重写规则将请求转发给tomcat RewriteEngine On RewriteCond %{REQUEST_URI} .*\.servlet.*$ RewriteRule ^
RewriteEngine On
RewriteCond %{REQUEST_URI} .*\.servlet.*$
RewriteRule ^/(.*)$ http://localhost:8080/$1 [P]
有什么想法吗
更新:
谢谢
但它仍然不起作用。每个流都已关闭,但仍有以下等待时间:
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流 输入流已关闭 是最近关闭的连接的正常状态,它将在内核定义的超时内保持该状态。您已经从应用程序方面尽了最大努力
如果您的连接闪烁得太快,并且缺少可用端口,您可以调整系统对它们的回收。概述Linux以及基本理论,列出相应的Windows参数,并进行详细解释。这不是Tomcat,而是您的操作系统
操作系统将及时退出连接,以避免端口重用过快造成的干扰。想象一下,当新连接在同一端口打开时,来自旧连接的数据包延迟到达。apache配置中是否设置了KeepAliveTimeout?请检查是否设置了超时。默认情况下是300秒,这可能会有问题,如果有人发送部分requestTIME\u WAIT states不“阻止服务器打开新连接”,我想你的意思是接受新连接。为什么你认为TIME\u WAIT连接会阻止任何东西?