【发布时间】:2017-03-08 23:37:30
【问题描述】:
我在 tomcat 上运行的 spring 应用程序打开了很多到 localhost 的连接,如下所示:
tcp6 1 0 localhost:4431 localhost:44178 CLOSE_WAIT 2393/java
tcp6 1 0 localhost:4431 localhost:44279 CLOSE_WAIT 2393/java
tcp6 1 0 localhost:4431 localhost:44264 CLOSE_WAIT 2393/java
tcp6 1 0 localhost:4431 localhost:44160 CLOSE_WAIT 2393/java
tcp6 1 0 localhost:4431 localhost:44224 CLOSE_WAIT 2393/java
并导致timeout waiting for connection pool.
你知道这些联系可能是什么吗?
我的server.xml 看起来像这样:
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<Realm className="org.apache.catalina.realm.MemoryRealm" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="
text/html,
text/xml,
text/plain,
text/css,
text/javascript,
text/json,
application/x-javascript,
application/javascript,
application/json,
application/x-font-woff,
image/png,
image/jpeg,
image/gif,
image/svg+xml
"
connectionTimeout="20000"
URIEncoding="UTF-8"
maxThreads="10000"
maxConnections="-1"
redirectPort="4431" />
<Connector port="4431" protocol="HTTP/1.1"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="
text/html,
text/xml,
text/plain,
text/css,
text/javascript,
text/json,
application/x-javascript,
application/javascript,
application/json,
application/x-font-woff,
image/png,
image/jpeg,
image/gif,
image/svg+xml
"
connectionTimeout="20000"
URIEncoding="UTF-8"
maxThreads="10000"
maxConnections="-1"
scheme="https"
secure="true"
clientAuth="false"
proxyPort="443" />
<Engine name="Catalina" defaultHost="localhost">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %A %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"" />
</Host>
</Engine>
</Service>
</Server>
端口4431 是主连接器的端口。应用程序似乎在调用自己。
【问题讨论】:
-
您可能会打开连接,然后在完成连接后永远不会关闭它们。追踪你所有的打开,并关闭它们。
-
我没有打开到 localhost 的连接。我使用了一个非常慢的 REST API,但该 API 在另一台服务器上运行。为什么有从 localhost 到 localhost 的连接?
-
不是你的数据库端口?有没有在tomcat的conf目录下查看
4431? -
我没有打开数据库连接。该应用程序仅使用 REST API 作为持久层。
-
您能发布更多详细信息吗?您的应用程序是部署在 Tomcat 中还是使用嵌入式容器?你用的是弹簧靴吗?您可以将应用程序的精简版发布到 github,以便重现问题。
标签: java spring spring-mvc tomcat