Java Tomcat未处理请求

Java Tomcat未处理请求,java,multithreading,tomcat,Java,Multithreading,Tomcat,我在部署web应用程序的生产tomcat中遇到问题。我在很长一段时间内运行良好,但在这之后,每当任何用户试图通过web浏览器访问应用程序时,浏览器上就会显示“连接重置”消息,即应用程序关闭 我试图增加tomcat内存,但问题仍然存在。我还进行了线程转储,其中所有线程都以阻塞状态显示 有人能帮我吗 线程转储示例 "http-80-173" daemon prio=6 tid=0x55392800 nid=0xf84 waiting for monitor entry [0x64c8e000..0x

我在部署web应用程序的生产tomcat中遇到问题。我在很长一段时间内运行良好,但在这之后,每当任何用户试图通过web浏览器访问应用程序时,浏览器上就会显示“连接重置”消息,即应用程序关闭

我试图增加tomcat内存,但问题仍然存在。我还进行了线程转储,其中所有线程都以阻塞状态显示

有人能帮我吗

线程转储示例

"http-80-173" daemon prio=6 tid=0x55392800 nid=0xf84 waiting for monitor entry [0x64c8e000..0x64c8f9e8]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at java.util.Arrays.copyOf(Arrays.java:2882)
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:572)
    at java.lang.StringBuffer.append(StringBuffer.java:320)
    - locked <0x4472eeb8> (a java.lang.StringBuffer)
    at java.text.MessageFormat.applyPattern(MessageFormat.java:436)
    at java.text.MessageFormat.<init>(MessageFormat.java:350)
    at java.text.MessageFormat.format(MessageFormat.java:811)
    at org.apache.naming.StringManager.getString(StringManager.java:121)
    at org.apache.naming.StringManager.getString(StringManager.java:144)
    at org.apache.naming.resources.FileDirContext.getAttributes(FileDirContext.java:432)
    at org.apache.naming.resources.BaseDirContext.getAttributes(BaseDirContext.java:747)
    at org.apache.naming.resources.ProxyDirContext.cacheLoad(ProxyDirContext.java:1531)
    at org.apache.naming.resources.ProxyDirContext.cacheLookup(ProxyDirContext.java:1454)
    at org.apache.naming.resources.ProxyDirContext.lookup(ProxyDirContext.java:288)
    at org.apache.naming.resources.DirContextURLConnection.getInputStream(DirContextURLConnection.java:368)
    at org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:435)
    at org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:392)
“http-80-173”守护程序prio=6 tid=0x55392800 nid=0xf84等待监视器条目[0x64c8e000..0x64c8f9e8]
java.lang.Thread.State:阻塞(在对象监视器上)
位于java.util.Arrays.copyOf(Arrays.java:2882)
位于java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
位于java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:572)
在java.lang.StringBuffer.append处(StringBuffer.java:320)
-锁定(一个java.lang.StringBuffer)
位于java.text.MessageFormat.applyPattern(MessageFormat.java:436)
位于java.text.MessageFormat.(MessageFormat.java:350)
在java.text.MessageFormat.format(MessageFormat.java:811)
位于org.apache.naming.StringManager.getString(StringManager.java:121)
位于org.apache.naming.StringManager.getString(StringManager.java:144)
位于org.apache.naming.resources.FileDirContext.getAttributes(FileDirContext.java:432)
位于org.apache.naming.resources.BaseDirContext.getAttributes(BaseDirContext.java:747)
位于org.apache.naming.resources.proxydirecontext.cacheLoad(proxydirecontext.java:1531)
位于org.apache.naming.resources.proxydirecontext.cacheLookup(proxydirecontext.java:1454)
位于org.apache.naming.resources.proxydirecontext.lookup(proxydirecontext.java:288)
位于org.apache.naming.resources.dircontexturconnection.getInputStream(dircontexturconnection.java:368)
位于org.apache.jasper.compiler.compiler.isOutDated(compiler.java:435)
位于org.apache.jasper.compiler.compiler.isOutDated(compiler.java:392)
所有线程都将处于相同的状态

"http-80-160" daemon prio=6 tid=0x5538dc00 nid=0x1e80 waiting for monitor entry [0x6453e000..0x6453fce8]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:45)
    at java.lang.StringBuffer.<init>(StringBuffer.java:79)
    at com.microsoft.sqlserver.jdbc.SQLCollation.readCollation(Unknown Source)
    at com.microsoft.sqlserver.jdbc.TypeInfo.init(Unknown Source)
    at com.microsoft.sqlserver.jdbc.StreamColumns.processBytes(Unknown Source)
    at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement$StatementExecutionRequest.executeStatement(Unknown Source)
    at com.microsoft.sqlserver.jdbc.CancelableRequest.execute(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeRequest(Unknown Source)
    **- locked <0x444b72c0> (a com.microsoft.sqlserver.jdbc.TDSWriter)**
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(Unknown Source)
    at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
“http-80-160”守护进程prio=6 tid=0x5538dc00 nid=0x1e80正在等待监视器条目[0x6453e000..0x6453fce8]
java.lang.Thread.State:阻塞(在对象监视器上)
位于java.lang.AbstractStringBuilder。(AbstractStringBuilder.java:45)
位于java.lang.StringBuffer。(StringBuffer.java:79)
位于com.microsoft.sqlserver.jdbc.SQLCollation.readCollation(未知源)
位于com.microsoft.sqlserver.jdbc.TypeInfo.init(未知源)
位于com.microsoft.sqlserver.jdbc.StreamColumns.processBytes(未知源)
位于com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(未知源)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(未知源)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(未知源)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement$StatementExecutionRequest.executeStatement(未知源)
位于com.microsoft.sqlserver.jdbc.CancelableRequest.execute(未知源)
位于com.microsoft.sqlserver.jdbc.SQLServerConnection.executeRequest(未知源)
**-锁定(com.microsoft.sqlserver.jdbc.TDSWriter)**
位于com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(未知源)
位于org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
这也是我在大多数情况下得到的一个共同点:

  • 锁定(com.microsoft.sqlserver.jdbc.TDSWriter)
我使用的是JDBC驱动程序2,我的操作系统是Windows 2007

此外,我正在使用连接池,在获取连接的过程中,它显示为锁定

"http-80-172" daemon prio=6 tid=0x55392400 nid=0x2548 waiting for monitor entry [0x64bfe000..0x64bffa68]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at org.apache.commons.pool.impl.GenericObjectPool.getNumIdle(GenericObjectPool.java:911)
    - waiting to lock <0x3ef89f88> (a org.apache.commons.dbcp.AbandonedObjectPool)
    at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:78)
    at org.apache.commons.dbcp.PoolingDriver.connect(PoolingDriver.java:176)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at com.cong.vts.dbutil.JDBCConnection.getConnection(JDBCConnection.java:42)
    at com.cong.vts.dbutil.SQLFunctions.createCSSFile(SQLFunctions.java:10069)
“http-80-172”守护进程prio=6 tid=0x55392400 nid=0x2548正在等待监视器条目[0x64bfe000..0x64bffa68]
java.lang.Thread.State:阻塞(在对象监视器上)
位于org.apache.commons.pool.impl.GenericObjectPool.getNumIdle(GenericObjectPool.java:911)
-等待锁定(org.apache.commons.dbcp.弃置对象池)
在org.apache.commons.dbcp.弃置对象池.borrowObject(弃置对象池.java:78)
位于org.apache.commons.dbcp.pooligdriver.connect(pooligdriver.java:176)
位于java.sql.DriverManager.getConnection(DriverManager.java:582)
位于java.sql.DriverManager.getConnection(DriverManager.java:207)
位于com.cong.vts.dbutil.JDBCConnection.getConnection(JDBCConnection.java:42)
位于com.cong.vts.dbutil.SQLFunctions.createCSSFile(SQLFunctions.java:10069)

prod环境的操作系统是什么?请共享catalina.out日志文件和ThreadDump中的示例?看起来像是死锁。。。线程转储应该告诉您在代码(或库代码)的哪个点被卡住,以及谁拥有重要的锁。这对于理解您的问题或帮助其他人识别它无疑是至关重要的。我已经编辑了问题,您可以在其中查看转储。您可以查看此链接。此问题现在不会出现。我的线程数现在少于350,但应用程序已停止运行