Java tomcat离开time\u等待连接

Java tomcat离开time\u等待连接,java,apache,tomcat,Java,Apache,Tomcat,我们使用Apache服务器作为前端服务器,使用Tomcat服务器作为后端服务器。前端客户端是一个JavaSwing应用程序。协议是黑森协议 有时候我们会收到很多小请求。在执行“nestat-a”时,等待连接的时间很长,这会阻止服务器打开新连接。只有与tomcat的连接似乎保持不变。与apache的连接似乎已关闭 我们使用重写规则将请求转发给tomcat RewriteEngine On RewriteCond %{REQUEST_URI} .*\.servlet.*$ RewriteRule ^

我们使用Apache服务器作为前端服务器,使用Tomcat服务器作为后端服务器。前端客户端是一个JavaSwing应用程序。协议是黑森协议

有时候我们会收到很多小请求。在执行“nestat-a”时,等待连接的时间很长,这会阻止服务器打开新连接。只有与tomcat的连接似乎保持不变。与apache的连接似乎已关闭

我们使用重写规则将请求转发给tomcat

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连接会阻止任何东西?