Prima alcuni sfondi dell'applicazione. Ho un'applicazione che elabora molte attività indipendenti in parallelo tramite un pool di thread. Il pool di thread è ora sospeso.Log4j sta bloccando la mia applicazione cosa sto facendo male?
Quanto segue è uno snippet dai miei dump di thread, tutti i miei thread in pool-2 sono BLOCCATI da "pool-2-thread-78". Sembra essere bloccato cercando di scrivere sulla console che trovo estremamente strano. Qualcuno può far luce sulla situazione per me?
EDIT: dettagli della piattaforma versione java "1.6.0_07" Java (TM) SE Runtime Environment (build 1.6.0_07-b06) Java HotSpot (TM) Cliente VM (build 10.0-b23, misto modalità, condivisione)
Ubuntu Linux server dual quad core machine.
Sembra bloccarsi durante la scrittura sul printstream, ho preso in considerazione solo la rimozione dell'appender della console, tuttavia preferirei sapere perché lo sta bloccando e rimuoverlo in base a questa conoscenza. In passato, la rimozione e vedere se funziona è tornare a mordere me :)
relativa sezione dal mio 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
estratto discarica Discussione
"pool-2-thread-79" Id = 149 BLOCKED su [email protected] di proprietà di "pool-2-thread-78" Id = 148 a org.apache.log4j .Category.callAppenders (Category.java:201) a org.apache.log4j.Category.forcedLog (Category.java:388) a org.apache.log4j.Category.error (Category.java:302) a com.blah.MessageProcessTask.run (MessageProcessTask.java:103) a java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:441) a java.util.concurrent.FutureTask $ Sync. innerRun (FutureTask/java: 268) presso java.util.concurrent.FutureTask.run (FutureTask/java: 54) a java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:885) a java.util.concurrent.ThreadPoolExecutor $ Worker .run (ThreadPoolExecutor.java:907) a java.lang.Thread.run (Thread.java:619)
"pool-2-thread-78" Id = 148 RUNNABLE a java.io.FileOutputStream .writeBytes (Native Method) a java.io.FileOutputStream.write (FileOutputStream.java:260) a java.io.BufferedOutputStream.write (BufferedOutputStream.java:105) - bloccato < 0x6f314ba4> (un java.io.BufferedOutputStream) a java.io.PrintStream.write (PrintStream.java:430) - bloccato < 0xd5d3504> (un java.io.PrintStream) a org.apache. log4j.ConsoleAppender $ SystemOutStream.write (ConsoleAppender.java:173) a sun.nio.cs.StreamEncoder.writeBytes (StreamEncoder.java:202) a sun.nio.cs.StreamEncoder.implFlushBuffer (StreamEncoder.java:272) a sole .nio.cs.StreamEncoder.implFlush (StreamEncoder.java:276) a sun.nio.cs.StreamEncoder.flush (StreamEncoder.java:122) - bloccato < 0x6243a076> (un java.io.OutputStreamWriter) a java.io.OutputStreamWriter.flush (OutputStreamWriter.java:212) a org.apache.log4j.helpers.QuietWriter.flush (QuietWriter.java:57) a org.apache.log4j.WriterAppender.subAppend (WriterA ppender.java:315) a org.apache.log4j.WriterAppender.append (WriterAppender.java:159) a org.apache.log4j.AppenderSkeleton.doAppend (AppenderSkeleton.java:230) - bloccato < 0x45dbd560> (a org.apache.log4j.ConsoleAppender) a org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders (AppenderAttachableImpl.java:65) a org.apache.log4j.Category.callAppenders (Category.java:203) - bloccato < 0x6c3ba437> (un org.apache.log4j.spi.RootLogger) a org.apache.log4j.Category.forcedLog (Category.java:388) a org.apache.log4j.Category.error (Categoria. java: 302) a com.blah.MessageProcessTask.run (MessageProcessTask.java:103) a java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:441) a java.util.concurrent.FutureTask $ Sync .innerRun (FutureTask/java: 268) a java.util.concurrent.FutureTask.run (FutureTask/java: 54) a java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:885) a java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:907) a java.lang.Thread.run (Thread.java:619)
Puoi pubblicare ulteriori informazioni sul tuo ambiente?Ho visto questo accadere sotto Windows quando si esegue in una shell cmd mentre si tenta di guardare la registrazione. – carson
grazie carson Ho aggiunto più dettagli alla domanda –
+1 per "... rimuoverlo in base a questa conoscenza ..." –