tomcat与https直接TCP连接时获取CLOSE_WAIT

时间:2016-09-27 07:24:54

标签: java sockets tomcat tcp

我使用tomcat 8.5.4在端口443上构建基于https的服务器,如下所示:

 94     <Connector
 95            protocol="org.apache.coyote.http11.Http11NioProtocol"
 96            port="8000" maxThreads="200"
 97            scheme="https" secure="true" SSLEnabled="true"
 98            keystoreFile="conf/rs_keystore.jks" keystorePass="ntsdawn"
 99            clientAuth="false" sslProtocol="TLS"/>

但客户端使用tcp连接端口8000,然后快速关闭tcp连接。在此之后,在我的服务器中,连接是CLOSE_WAIT状态,更重要的是,CPU增长并且使用gc触发器非常快地创建了org.apache.tomcat.util.net.TLSClientHelloExtractor对象:

root@nts32:/home/vcloud/apache-tomcat-8.5.4/logs# jmap -histo 14 | head

 num     #instances         #bytes  class name
----------------------------------------------
   1:       5159655      165108960  java.util.HashMap$Node
   2:          9138      131509512  [I
   3:       5148446      123562704  java.util.ArrayList
   4:       5145501      123492024  java.util.concurrent.LinkedBlockingQueue$Node
   5:       5145486      123491664  org.apache.tomcat.util.net.**TLSClientHelloExtractor**
   6:       3210008      102720256  java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
   7:       2162508       86500320  java.util.HashMap$KeyIterator

连接将永远停留在CLOSE_WAIT ....

但是,如果我修改server.xml使用http而不是像这样的https:

 70     <Connector port="8000" protocol="org.apache.coyote.http11.Http11NioProtocol"
 71                connectionTimeout="20000"
 72                redirectPort="8443" />

然后一切都好。 TCP连接来了,我的服务器将在客户端发送FIN时回复FIN。

我的https配置有什么问题吗?

2 个答案:

答案 0 :(得分:2)

tomcat 8.5.4 中存在一个错误,其中在TLS握手完成之前,当套接字连接被丢弃时,TLS连接进入循环。升级到 tomcat 8.5.5或更高版本应解决此问题。

以下是错误

https://bz.apache.org/bugzilla/show_bug.cgi?id=60035

答案 1 :(得分:1)

HTTPs apache库也可能存在问题。从httpcore-osgi-4.4.11的Apache发行说明中,我发现“ httpcore-osgi”库中已修复的两个错误可能与以下错误有关:     错误修复:更正了对端发起的平稳SSL会话终止的处理     (从主服务器反向移植)。     由Oleg Kalnichevski贡献

Bug fix: corrected handling of NEED_WRAP handshake status during graceful SSL session termination
(back-ported from master).
Contributed by Oleg Kalnichevski <olegk at apache.org>

参考链接:https://www.apache.org/dist/httpcomponents/httpcore/RELEASE_NOTES-4.4.x.txt