需要帮助查找运行在WebSphere server上的java应用程序中挂起线程的根本原因吗

需要帮助查找运行在WebSphere server上的java应用程序中挂起线程的根本原因吗,java,jakarta-ee,websphere,sybase,Java,Jakarta Ee,Websphere,Sybase,有人能帮我找到下面挂线的根本原因吗。? 请在下面找到stacktrace ThreadMonitor W WSVR0605W:Thread WebContainer:19 000000 4e已处于活动状态765581毫秒,可能已挂起。 服务器中总共有/有1个线程可能挂起 at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputSt

有人能帮我找到下面挂线的根本原因吗。? 请在下面找到stacktrace

ThreadMonitor W WSVR0605W:Thread WebContainer:19 000000 4e已处于活动状态765581毫秒,可能已挂起。 服务器中总共有/有1个线程可能挂起

    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:129) 
    at com.sybase.timedio.RawDbio.reallyRead(RawDbio.java) 
    at com.sybase.timedio.Dbio.doRead(Dbio.java) 
    at com.sybase.timedio.InStreamMgr.readIfOwner(InStreamMgr.java) 
    at com.sybase.timedio.InStreamMgr.doRead(InStreamMgr.java) 
    at com.sybase.tds.TdsProtocolContext.getChunk(TdsProtocolContext.java) 
    at com.sybase.tds.PduInputFormatter.readPacket(PduInputFormatter.java) 
    at com.sybase.tds.PduInputFormatter.read(PduInputFormatter.java) 
    at com.sybase.tds.TdsInputStream.read(TdsInputStream.java) 
    at com.sybase.tds.TdsInputStream.readUnsignedByte(TdsInputStream.java) 
    at com.sybase.tds.Tds.nextResult(Tds.java) 
    at com.sybase.jdbc.ResultGetter.nextResult(ResultGetter.java) 
    at com.sybase.jdbc.SybStatement.nextResult(SybStatement.java) 
    at com.sybase.jdbc.SybStatement.queryLoop(SybStatement.java) 
    at com.sybase.jdbc.SybStatement.executeQuery(SybStatement.java) 
    at com.sybase.jdbc.SybCallableStatement.executeQuery(SybCallableStatement.java) 
    at com.ibm._jsp._prodStatHandlingAgent._jspService(_prodStatHandlingAgent.java:247) 
    at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:98) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1661) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:937) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:500) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 
    at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:121) 
    at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:239) 
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:864) 
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583) 
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384) 
    at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83) 
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:557) 
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:607) 
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:984) 
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1069) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550) 
注意:如果您需要更多信息,请发表评论


谢谢。

您的数据库sybase操作似乎很慢。 在这种情况下,您发送了一个db查询,只需等待响应。 通常有两个原因:

您的查询没有经过优化,需要很长时间才能完成。 您只需使用特定查询获取大量数据,因此应该缩小条件范围。 您正在访问的数据库资源已被另一个连接锁定。您可以使用DB工具来了解数据库中发生了什么。
请提供完整的错误堆栈trace@DevPa添加了完整堆栈跟踪。上面的线程没有真正挂起。。。它只是从插座读取。。。在java内核中看到这样的线程是很正常的。您可以获取一个核心转储并使用核心转储分析器进行分析吗?您可以告诉我如何识别导致问题的查询吗?它似乎是在jsp文件中硬编码的,通常这是一种不好的做法。这使得识别代码行以及随后进行的jdbc调用变得困难。如果您不能复制这个,即您不知道它是哪个jsp,那么您应该列出在jsp中使用的查询,并分别分析每个查询。