https://issues.apache.org/bugzilla/show_bug.cgi?id=50614

           Summary: Lock in CallAppenders causing all Thread to wait
                    forever
           Product: Log4j
           Version: 1.2
          Platform: Sun
        OS/Version: Solaris
            Status: NEW
          Severity: major
          Priority: P2
         Component: Appender
        AssignedTo: log4j-dev@logging.apache.org
        ReportedBy: amr.elad...@etisalat.com


Dear All,

    We are facing a problem that JBoss Threads are all consumed causing the
whole web application to hang. We investigated the issue and found that all
Threads are waiting on a synchronized block inside log4j. 

exactly in this block of code:

 public
  void callAppenders(LoggingEvent event) {
    int writes = 0;

    for(Category c = this; c != null; c=c.parent) {
      // Protected against simultaneous call to addAppender, removeAppender,...
      synchronized(c) {
    if(c.aai != null) {
      writes += c.aai.appendLoopOnAppenders(event);
    }
    if(!c.additive) {
      break;
    }
      }
    }

    if(writes == 0) {
      repository.emitNoAppenderWarning(this);
    }
  }


There are two reported bugs here (41214,44157) and we followed the below
recommendations:
1. upgrade log4j from 1.2.15 to 1.2.16.
2. upgrade jdk from 1.5.17 to 1.5.22 ( we cannot go for 1.6.22 right now)


More over, we made sure that there are no shared logger i.e. there are new
logger for each class and created by that class itself. 


But the problem exists. 



Here I collected the thread dump of threads locking the synchronize object over
few days. 




2011-01-18
"Some Thread1" daemon prio=3 tid=0x011e0b78 nid=0x33a runnable
[0x53d7e000..0x53d7fa70]
    at java.lang.Throwable.fillInStackTrace(Native Method)
    at java.lang.Throwable. (Throwable.java:181)
    at
org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:191)
    at
org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
    at
org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:64)
    at org.apache.log4j.PatternLayout.format(PatternLayout.java:503)
    at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
    at org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
    at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
    - locked <0x780a04c8> (a org.apache.log4j.ConsoleAppender)
    at
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    at org.apache.log4j.Category.callAppenders(Category.java:203)
    - locked <0x7807cfa8> (a org.apache.log4j.spi.RootLogger)
    at org.apache.log4j.Category.forcedLog(Category.java:388)
    at org.apache.log4j.Category.debug(Category.java:257) 

____________________________



2011-01-17-13:51:28
Thread: Some Thread2 : priority:5, demon:true, threadId:5093,
threadState:RUNNABLE, lockName:null

    java.lang.Throwable.getStackTraceElement(Native Method)
    java.lang.Throwable.getOurStackTrace(Throwable.java:592)
    java.lang.Throwable.printStackTrace(Throwable.java:511)
    org.apache.log4j.spi.LocationInfo.(LocationInfo.java:105)
   
org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:191)
   
org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
    org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:64)
    org.apache.log4j.PatternLayout.format(PatternLayout.java:503)
    org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
    org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
    org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
   
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    org.apache.log4j.Category.callAppenders(Category.java:203)
    org.apache.log4j.Category.forcedLog(Category.java:388)
    org.apache.log4j.Category.debug(Category.java:257)


_____________________________________

2010-12-27 13:29:47
    Thread: Some Thread3 - Pre-Rendering Page - Rendering Page : priority:5,
demon:true, threadId:8960, threadState:RUNNABLE, lockName:null

    java.lang.Throwable.fillInStackTrace(Native Method)
    java.lang.Throwable.(Throwable.java:181)
   
org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:191)
   
org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
    org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:64)
    org.apache.log4j.PatternLayout.format(PatternLayout.java:503)
    org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
    org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
    org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
   
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    org.apache.log4j.Category.callAppenders(Category.java:203)
    org.apache.log4j.Category.forcedLog(Category.java:388)
    org.apache.log4j.Category.debug(Category.java:257)

________________________________________

Thread: Some Thread4 : priority:5, demon:true, threadId:8977,
threadState:RUNNABLE, lockName:null

    java.lang.Throwable.getStackTraceElement(Native Method)
    java.lang.Throwable.getOurStackTrace(Throwable.java:592)
    java.lang.Throwable.printStackTrace(Throwable.java:511)
    org.apache.log4j.spi.LocationInfo.(LocationInfo.java:105)
   
org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:191)
   
org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
    org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:64)
    org.apache.log4j.PatternLayout.format(PatternLayout.java:503)
    org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
    org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
    org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
   
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    org.apache.log4j.Category.callAppenders(Category.java:203)
    org.apache.log4j.Category.forcedLog(Category.java:388)
    org.apache.log4j.Category.debug(Category.java:257)

____________________________________

    Thread: Some Thread5 : priority:5, demon:true, threadId:8991,
threadState:RUNNABLE, lockName:null

    java.lang.Throwable.getStackTraceElement(Native Method)
    java.lang.Throwable.getOurStackTrace(Throwable.java:592)
    java.lang.Throwable.printStackTrace(Throwable.java:511)
    org.apache.log4j.spi.LocationInfo.(LocationInfo.java:105)
   
org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:191)
   
org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
    org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:64)
    org.apache.log4j.PatternLayout.format(PatternLayout.java:503)
    org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
    org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
    org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
   
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    org.apache.log4j.Category.callAppenders(Category.java:203)
    org.apache.log4j.Category.forcedLog(Category.java:388)
    org.apache.log4j.Category.debug(Category.java:257)

____________________________________________________________
Thread: Some Thread6 : priority:5, demon:true, threadId:9017,
threadState:RUNNABLE, lockName:null

    java.lang.Throwable.getStackTraceElement(Native Method)
    java.lang.Throwable.getOurStackTrace(Throwable.java:592)
    java.lang.Throwable.printStackTrace(Throwable.java:511)
    org.apache.log4j.spi.LocationInfo.(LocationInfo.java:105)
   
org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:191)
   
org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
    org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:64)
    org.apache.log4j.PatternLayout.format(PatternLayout.java:503)
    org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
    org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
    org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
   
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    org.apache.log4j.Category.callAppenders(Category.java:203)
    org.apache.log4j.Category.forcedLog(Category.java:388)
    org.apache.log4j.Category.debug(Category.java:257)


____________________________________________________________

    2011-01-03 18:17:26

    Thread: Some Thread 7 : priority:5, demon:true, threadId:38364,
threadState:RUNNABLE, lockName:null

    java.io.FileOutputStream.writeBytes(Native Method)
    java.io.FileOutputStream.write(FileOutputStream.java:260)
    java.io.BufferedOutputStream.write(BufferedOutputStream.java:105)
    java.io.PrintStream.write(PrintStream.java:412)
    sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
    sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(StreamEncoder.java:404)
    sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
    sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
    java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
    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)
   
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    org.apache.log4j.Category.callAppenders(Category.java:203)
    org.apache.log4j.Category.forcedLog(Category.java:388)
    org.apache.log4j.Category.debug(Category.java:257)


__________________________________________________________


2011-01-03 18:22:43
    Thread: Some Thread8 : priority:5, demon:true, threadId:9604,
threadState:RUNNABLE, lockName:null

    java.lang.Throwable.getStackTraceElement(Native Method)
    java.lang.Throwable.getOurStackTrace(Throwable.java:592)
    java.lang.Throwable.printStackTrace(Throwable.java:511)
    org.apache.log4j.spi.LocationInfo.(LocationInfo.java:105)
   
org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:191)
   
org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
    org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:64)
    org.apache.log4j.PatternLayout.format(PatternLayout.java:503)
    org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
    org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
    org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
   
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    org.apache.log4j.Category.callAppenders(Category.java:203)
    org.apache.log4j.Category.forcedLog(Category.java:388)
    org.apache.log4j.Category.debug(Category.java:257)


_______________________________________

Thread: Some Thread9: priority:5, demon:true, threadId:38364,
threadState:RUNNABLE, lockName:null

    java.lang.Throwable.getStackTraceElement(Native Method)
    java.lang.Throwable.getOurStackTrace(Throwable.java:592)
    java.lang.Throwable.printStackTrace(Throwable.java:511)
    org.apache.log4j.spi.LocationInfo.(LocationInfo.java:105)
   
org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:191)
   
org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483)
    org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:64)
    org.apache.log4j.PatternLayout.format(PatternLayout.java:503)
    org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
    org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
    org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
   
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    org.apache.log4j.Category.callAppenders(Category.java:203)
    org.apache.log4j.Category.forcedLog(Category.java:388)
    org.apache.log4j.Category.debug(Category.java:257)









************************

Is there any way to avoid this blocking? 
Can we add some sort of timeout to release the lock?

appreciate your feedback.

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-dev-h...@logging.apache.org

Reply via email to