Сначала расскажем о приложении. У меня есть приложение, обрабатывающее множество независимых задач параллельно через пул потоков. Пул потоков теперь висит.
Ниже приведен фрагмент из моих дампов потоков, все мои потоки в пуле-2 BLOCKED являются "пул-2-нить-78". Кажется, он заблокирован, пытаясь написать консоль, которую я считаю крайне странным. Может ли кто-нибудь пролить свет на ситуацию для меня?
ИЗМЕНИТЬ: Информация о платформе java-версия "1.6.0_07" Java (TM) SE Runtime Environment (сборка 1.6.0_07-b06) Клиентская виртуальная машина Java HotSpot (TM) (сборка 10.0-b23, смешанный режим, совместное использование)
Сервер двухъядерных процессоров Linux Ubuntu Linux.
Кажется, что он блокируется при записи в printstream, я рассмотрел просто удаление консольного приложения, но я бы лучше знал, почему он блокирует и удаляет его на основе этих знаний. Раньше удалял и смотрел, если он работает, вернулся, чтобы укусить меня:)
соответствующий раздел из моего log4j
log4j.rootLogger = DEBUG, STDOUT log4j.logger.com.blah = INFO, LOG log4j.appender.STDOUT = org.apache.log4j.ConsoleAppender log4j.appender.LOG = org.apache.log4j.FileAppender
Экстракт дампа нити
"pool-2-thread-79" Id = 149 BLOCKED on [email protected] принадлежащий "pool-2-thread-78" Id = 148 at org.apache.log4j.Category.callAppenders(Category.java:201) в org.apache.log4j.Category.forcedLog(Category.java:388) в org.apache.log4j.Category.error(Category.java:302) в com.blah.MessageProcessTask.run(MessageProcessTask.java:103) в java.util.concurrent.Executors $RunnableAdapter.call(Executors.java:441) в java.util.concurrent.FutureTask $Sync.innerRun(FutureTask/Java: 268) в java.util.concurrent.FutureTask.run(FutureTask/Java: 54) в java.util.concurrent.ThreadPoolExecutor $Worker.runTask(ThreadPoolExecutor.java:885) в java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:907) в java.lang.Thread.run(Thread.java:619)
"pool-2-thread-78" Id = 148 RUNNABLE at java.io.FileOutputStream.writeBytes(Native Метод) при java.io.FileOutputStream.write(FileOutputStream.java:260) в java.io.BufferedOutputStream.write(BufferedOutputStream.java:105) - заблокирован < 0x6f314ba4 > (java.io.BufferedOutputStream) в java.io.PrintStream.write(PrintStream.java:430) - заблокировано < 0xd5d3504 > (java.io.PrintStream) в org.apache.log4j.ConsoleAppender $SystemOutStream.write(ConsoleAppender.java:173) в sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202) в sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272) в sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276) в sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122) - заблокирован < 0x6243a076 > (java.io.OutputStreamWriter) в java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212) в org.apache.log4j.helpers.QuietWriter.flush(QuietWriter.java:57) в org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:315) в org.apache.log4j.WriterAppender.append(WriterAppender.java:159) в org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230) - заблокировано < 0x45dbd560 > (org.apache.log4j.ConsoleAppender) в org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65) в org.apache.log4j.Category.callAppenders(Category.java:203) - заблокировано < 0x6c3ba437 > (a org.apache.log4j.spi.RootLogger) в org.apache.log4j.Category.forcedLog(Category.java:388) в org.apache.log4j.Category.error(Category.java:302) в com.blah.MessageProcessTask.run(MessageProcessTask.java:103) в java.util.concurrent.Executors $RunnableAdapter.call(Executors.java:441) в java.util.concurrent.FutureTask $Sync.innerRun(FutureTask/Java: 268) в java.util.concurrent.FutureTask.run(FutureTask/Java: 54) в java.util.concurrent.ThreadPoolExecutor $Worker.runTask(ThreadPoolExecutor.java:885) в java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:907) в java.lang.Thread.run(Thread.java:619)