我们遇到了如下问题 我们不知道问题是: 1.socket从数据库读取太长,无法到达StuckThreadMaxTime 600s 2.database查询运行时间过长 2.锁定数据库或其他对象
任何建议都将不胜感激!
Thread-36“[STUCK] ExecuteThread:队列中的'3': 'weblogic.kernel.Default(self-tuning)'“{ jrockit.net.SocketNativeIO.readBytesPinned(SocketNativeIO.java:???) jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:31) java.net.SocketInputStream.socketRead0(SocketInputStream.java:???) java.net.SocketInputStream.read(SocketInputStream.java:107) com.microsoft.sqlserver.jdbc.DBComms.receive(未知来源) 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@41dbbdd [瘦锁] com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(未知 资源) com.microsoft.sqlserver.jdbc.SQLServerStatement.getMaxFieldSize(未知 资源) weblogic.jdbc.common.internal.ConnectionEnv.cleanUpStatementForReUse(ConnectionEnv.java:1356) weblogic.jdbc.common.internal.ConnectionEnv.returnCachedStatement(ConnectionEnv.java:1118) ^ - 持有锁:weblogic.jdbc.common.internal.ConnectionEnv$1@41f2d97 [瘦锁] weblogic.jdbc.wrapper.Statement.internalClose(Statement.java:342) weblogic.jdbc.wrapper.Statement.doClose(Statement.java:399) weblogic.jdbc.wrapper.Statement.close(Statement.java:391) com.riskintegrator.infrastructure.database.DBConnector.getConnection(DBConnector.java:66) ^ - 持有锁:com.riskintegrator.infrastructure.database.DBConnector@1fda7d8 [thin] 锁] com.riskintegrator.infrastructure.database.DBConnector。(DBConnector.java:56) com.riskintegrator.slsb.BaseSessionBean.populateFormWithPreparedStatement(BaseSessionBean.java:76) com.riskintegrator.slsb.BaseSession_6uq9n4_EOImpl.populateFormWithPreparedStatement(BaseSession_6uq9n4_EOImpl.java:763) com.riskintegrator.slsb.BaseSessionDelegate.populateFormWithPreparedStatement(BaseSessionDelegate.java:118) com.riskintegrator.slsb.setup.SeverityBandBD.selectByValue(SeverityBandBD.java:181) com.riskintegrator.slsb.ca.ComputeAssessmentScoreBean.ComputeRiskScore(ComputeAssessmentScoreBean.java:332) com.riskintegrator.slsb.ca.ComputeAssessmentScoreBean.ComputeAssessmentScore(ComputeAssessmentScoreBean.java:119) com.riskintegrator.slsb.ca.ComputeAssessmentScoreBean_s478gq_EOImpl.ComputeAssessmentScore(ComputeAssessmentScoreBean_s478gq_EOImpl.java:37) com.riskintegrator.slsb.ca.ComputeAssessmentScoreBD.ComputeAssessmentScore(ComputeAssessmentScoreBD.java:32) com.riskintegrator.slsb.ca.AssessmentScoreBean.ProcessAssessment(AssessmentScoreBean.java:44) com.riskintegrator.slsb.ca.AssessmentScoreSession_nlmr0a_EOImpl.ProcessAssessment(AssessmentScoreSession_nlmr0a_EOImpl.java:37) com.riskintegrator.slsb.ca.AssessmentScoreBD.ProcessAssessment(AssessmentScoreBD.java:36) com.riskintegrator.slsb.ScheduledBatchBean.executeJob(ScheduledBatchBean.java:568) com.riskintegrator.slsb.ScheduledBatchBean.executeDailyRunOnce(ScheduledBatchBean.java:792) com.riskintegrator.slsb.ScheduledBatchBean.ejbTimeout(ScheduledBatchBean.java:957) weblogic.ejb.container.timer.TimerImpl.timerExpired(TimerImpl.java:219)
^ - 持有锁:weblogic.ejb.container.timer.TimerImpl@12c8e34 [瘦锁] weblogic.timers.internal.TimerImpl.run(TimerImpl.java:253) weblogic.work.SelfTuningWorkManagerImpl $ WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:516) weblogic.work.ExecuteThread.execute(ExecuteThread.java:198) weblogic.work.ExecuteThread.run(ExecuteThread.java:165)
答案 0 :(得分:6)
线程转储显示线程已经卡住了超过600秒(10分钟),而从SQL Server接收数据。
根据我的上述经验,这可能是长时间运行的数据库查询或Weblogic与数据库之间的间歇性连接失败,使得套接字处于不稳定的状态。< / p>
这是一次性还是同样的堆栈跟踪在其他卡住的线程上也可用 - 在同一行?如果是,那么您可能需要使用SQL查询分析器查看数据库查询,或者它在MS-SQL中等效
如果是一次性的,可能是网络问题