我正在运行Tomcat 8.0.14(最近从Tomcat 5.5升级),并且在应用程序服务器上经历了非常不一致的悬挂。

问题描述 投票:0回答:0

发生悬挂时,所有的HTTP-NIO线程都在等待与数据库的连接。由于所有线程处于等待模式,这可能是上一个点的原因。有关其中一个线程的线程转储,请参见下面(它们都在做同一件事,因此不需要发布整个线程转储)。所有的NIO线程似乎都在等待同一锁(停车等待

)。
    我们在最大堆积空间附近没有什么地方
  • 我们正在记录废弃的连接,而没有看到有关废弃连接的日志中的任何内容。
  • 在任何tomcat日志中绝对没有错误。没有连接池耗尽的例外,不记忆的例外等。
  • "http-nio-8080-exec-57" - Thread t@58985 java.lang.Thread.State: WAITING at sun.misc.Unsafe.park(Native Method) - parking to wait for <7ed51011> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(Unknown Source) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source) at org.apache.tomcat.dbcp.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:582) at org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:439) at org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:360) at org.apache.tomcat.dbcp.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:118) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1412) at xx.xx.XXXXConnection.getConnection(XXXXConnection.java:62) at xx.xx.XX.insert(XX.java:36) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523) - locked <6aa0c93c> (a org.apache.tomcat.util.net.NioChannel) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source) Locked ownable synchronizers: - locked <242c7551> (a java.util.concurrent.ThreadPoolExecutor$Worker) <7ed51011>
  • 我们尝试了以下内容:
  • 我们一直在使用VisualVM监视应用程序,除了看到所有在悬挂期间等待连接的线程之外,我们没有看到任何有问题的指示。
  • 我们已经介绍了该应用程序,并且没有看到任何内存泄漏
我们增加了连接池中的连接数量, 但是看不到我们达到的最大值(500)。
垃圾收集的可靠日志记录,只看到收集的分数为一秒钟。
我开始认为这可能是网络或ISP中的东西,因为它非常不一致。该应用程序始终在其上具有相当一致的负载,有时会持续几天,然后在几分钟内崩溃几次。也许网络以某种方式阻止了响应?

在这里有人有任何想法吗?这让我发疯了,因为我们没有任何报道问题。

update8/31/2015
  • tomcat今天早上疯狂地悬挂。它在一个半小时内挂了7次。我一直在监视端口8080上的连接,它停留在110左右的位置。在悬挂期间,服务器上仍然可以使用Tomcat样本战争。
  • **更新9/7/2015 **
  • 没有人会看到以下资源设置的问题?
  • <Resource name="jdbc/XX" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" maxActive="500" minIdle="30" maxIdle="200" maxWait="20000" username="username" password="password" url="jdbc:mysql://localhost/XX?autoReconnect=true" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>

使用JavaZGC

解决

export CATALINA_OPTS="-Xms10g -Xmx10g -XX:+UseZGC -XX:+ZGenerational"

tomcat的JSP Servlet引擎是当用户使用XMS和XMX标志分配大量RAM时收集的垃圾。

java mysql tomcat freeze tomcat8
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.