У нас есть приложение, работающее в WebSphere (к сожалению, это 6.1, который больше не поддерживается, он еще не был перенесен в производственную версию на более позднюю версию), которое полностью перестает отвечать из-за зависших потоков.
Насколько я могу судить, мы полностью исчерпали один из пулов потоков.
Я активировал обнаружение зависших потоков и получаю дамп ядра / потока при обнаружении зависших потоков.
Сервер может работать без проблем несколько дней, но на этой неделе дважды давал сбой.
Когда загружаю дамп ядра / потока в «IBM Thread and Monitor Dump Analyzer для Java», он сообщает мне, что есть определенное количество зависших потоков (на этот раз было 2, в прошлый раз 11) и несколько (обычно около 40) потоков "ожидание по условию" и несколько запущенных потоков. Я считаю, что один из пулов потоков имеет примерно такой размер (50).
Теперь я вижу потоки, ожидающие блокировки, имеющие блокировки или ожидающие.
Большинство из них показывают дорожку стека, которая всегда заканчивается так:
в java / lang / Object.wait (собственный метод) в java / lang / Object.wait (Object.java:231)
Теперь, как я могу отследить это до проблемы конфигурации сервера, проблемы с приложением, проблемы WebSphere или чего-то еще? Как это должно помочь мне отследить проблему, когда почти все там ссылается на код IBM?
Я не могу обратиться за помощью к IBM, так как 6.1 в настоящее время является неподдерживаемой версией WebSphere, и, хотя была проделана работа, чтобы заставить ее работать под WebSphere 7, мы еще не готовы перейти на нее в производственной среде.
Это трассировка стека заблокированных потоков:
HAManager.thread.pool : 0
Blocked
Waiting for Monitor Lock on java/lang/Object@12648F78/12648F84
at java/lang/Object.wait(Native Method)
at java/lang/Object.wait(Object.java:231)
at com/ibm/ws/util/BoundedBuffer.waitGet_(BoundedBuffer.java:203)
at com/ibm/ws/util/BoundedBuffer.take(BoundedBuffer.java:564)
at com/ibm/ws/util/ThreadPool.getTask(ThreadPool.java:869)
at com/ibm/ws/util/ThreadPool$Worker.run(ThreadPool.java:1617)
WebContainer : 5
Blocked
Waiting for Monitor Lock on com/ibm/ejs/ras/TraceLogger@11265878/11265884
at com/ibm/ejs/ras/TraceLogger.doLog(TraceLogger.java:299)
at com/ibm/ejs/ras/TraceLogger.processEvent(TraceLogger.java:286)
at com/ibm/ws/logging/WsHandlerWrapper.publish(WsHandlerWrapper.java:43)
at java/util/logging/Logger.log(Logger.java:526)
at com/ibm/ejs/ras/Tr.logToJSR47Logger(Tr.java:1625)
at com/ibm/ejs/ras/Tr.fireEvent(Tr.java:1587)
at com/ibm/ejs/ras/Tr.fireTraceEvent(Tr.java:1509)
at com/ibm/ejs/ras/Tr.debug(Tr.java:610)
at com/ibm/ws/rsadapter/spi/WSRdbManagedConnectionImpl.inGlobalTransaction(WSRdbManagedConnectionImpl.java:1045)
at com/ibm/ws/rsadapter/jdbc/WSJdbcConnection.commit(WSJdbcConnection.java:961)
...
Потоки, «ожидающие по условию», представляют собой смесь:
at java/lang/Thread.sleep(Native Method)
at java/lang/Thread.sleep(Thread.java:941)
....
и много
at java/lang/Object.wait(Native Method)
at java/lang/Object.wait(Object.java:231)
...
У меня довольно своеобразный, почему он этого ждет ?:
at java/util/Calendar.setFieldsComputed(Calendar.java:1402)
at java/util/Calendar.complete(Calendar.java:1349)
at java/util/Calendar.get(Calendar.java:1120)
at java/text/SimpleDateFormat.subFormat(SimpleDateFormat.java:930)
at java/text/SimpleDateFormat.format(SimpleDateFormat.java:837)
at java/text/SimpleDateFormat.format(SimpleDateFormat.java:809)
at com/ibm/ws/logging/TraceLogFormatter.formatTimeAndThread(TraceLogFormatter.java:125)
at com/ibm/ws/logging/TraceLogFormatter.formatHeaderBasic(TraceLogFormatter.java:223)
at com/ibm/ws/logging/TraceLogFormatter.formatBasic(TraceLogFormatter.java:439)
at com/ibm/ejs/ras/TraceLogger.doLog(TraceLogger.java:295)
at com/ibm/ejs/ras/TraceLogger.processEvent(TraceLogger.java:286)
at com/ibm/ws/logging/WsHandlerWrapper.publish(WsHandlerWrapper.java:43)
...
У меня тоже есть такое:
WebContainer : 6
Owns Monitor Lock on com/ibm/ejs/ras/TraceLogger@11265878/11265884
at sun/io/CharToByteSingleByte.convert(CharToByteSingleByte.java:329)
at com/ibm/misc/IOConverter.convert(IOConverter.java:111)
at sun/io/CharToByteConverter.convertAny(CharToByteConverter.java:191)
at sun/nio/cs/StreamEncoder$ConverterSE.implWrite(StreamEncoder.java:259)
at sun/nio/cs/StreamEncoder.write(StreamEncoder.java:186)
at java/io/OutputStreamWriter.write(OutputStreamWriter.java:214)
at java/io/BufferedWriter.flushBuffer(BufferedWriter.java:132)
at java/io/PrintStream.write(PrintStream.java:492)
at java/io/PrintStream.print(PrintStream.java:636)
at java/io/PrintStream.println(PrintStream.java:773)
at com/ibm/ejs/ras/TraceLogger.doLog(TraceLogger.java:300)
at com/ibm/ejs/ras/TraceLogger.processEvent(TraceLogger.java:286)
at com/ibm/ws/logging/WsHandlerWrapper.publish(WsHandlerWrapper.java:43)
at java/util/logging/Logger.log(Logger.java:526)
at com/ibm/ejs/ras/Tr.logToJSR47Logger(Tr.java:1625)
at com/ibm/ejs/ras/Tr.fireEvent(Tr.java:1587)
at com/ibm/ejs/ras/Tr.fireTraceEvent(Tr.java:1509)
at com/ibm/ejs/ras/Tr.entry(Tr.java:776)
at com/ibm/ws/rsadapter/jdbc/WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2056)
at com/ibm/ws/rsadapter/jdbc/WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2039)
...
и наконец это:
WebContainer : 8
at java/lang/StringBuffer.append(StringBuffer.java:239)
at com/ibm/ws/logging/TraceLogFormatter.formatTimeAndThread(TraceLogFormatter.java:137)
at com/ibm/ws/logging/TraceLogFormatter.formatHeaderBasic(TraceLogFormatter.java:223)
at com/ibm/ws/logging/TraceLogFormatter.formatBasic(TraceLogFormatter.java:439)
at com/ibm/ejs/ras/TraceLogger.doLog(TraceLogger.java:295)
at com/ibm/ejs/ras/TraceLogger.processEvent(TraceLogger.java:286)
at com/ibm/ws/logging/WsHandlerWrapper.publish(WsHandlerWrapper.java:43)
at java/util/logging/Logger.log(Logger.java:526)
at com/ibm/ejs/ras/Tr.logToJSR47Logger(Tr.java:1625)
at com/ibm/ejs/ras/Tr.fireEvent(Tr.java:1587)
at com/ibm/ejs/ras/Tr.fireTraceEvent(Tr.java:1509)
at com/ibm/ejs/ras/Tr.exit(Tr.java:796)
at com/ibm/ejs/j2c/PoolManager.processPoolRequestStats(PoolManager.java:6879)
at com/ibm/ejs/j2c/PoolManager.reserve(PoolManager.java:2026)
at com/ibm/ejs/j2c/ConnectionManager.allocateMCWrapper(ConnectionManager.java:940)
at com/ibm/ejs/j2c/ConnectionManager.allocateConnection(ConnectionManager.java:614)
at com/ibm/ws/rsadapter/jdbc/WSJdbcDataSource.getConnection(WSJdbcDataSource.java:449)
at com/ibm/ws/rsadapter/jdbc/WSJdbcDataSource.getConnection(WSJdbcDataSource.java:418)
...