You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by bu...@apache.org on 2004/03/28 23:43:12 UTC

DO NOT REPLY [Bug 28006] New: - AsyncAppender: Dispatcher should run at normal prio

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=28006>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=28006

AsyncAppender: Dispatcher should run at normal prio

           Summary: AsyncAppender: Dispatcher should run at normal prio
           Product: Log4j
           Version: 1.2
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Appender
        AssignedTo: log4j-dev@jakarta.apache.org
        ReportedBy: schulz@videotron.ca


In a production environment, under load the following scenario
developed:
- Async buffer filled up, and the proceeding requests took priority
  over the Dispatcher,
- additional requests were blocked,
- as the system finished enough requests so that the low prio
  Dispatcher could run, it proceeded with its appender calls
- each event processed, freed another slot for one of the blocked
  threads, which in turn immediately took over the CPU from the
  Dispatcher.

The end effect was a severly choked system.
Even worse, on Solaris the blocked threads are not scheduled fairly,
but in nearly-LIFO order, leading to near-arbitrary delays.

The priority for the Dispatcher should be normal by default.
I don't mind if there are niche use cases which require a low
prio for the Dispatcher, but that should then be made optionally
configurable.

I can provide the simple change, plus a fix for the race condition
which can develop between the Dispatcher and the blocked threads
when the Dispatcher manages to process 2 events before the next
thread inserts one. Drop me a note.

To test for this scenario, you need a slow Appender such as a DB appender, or 
add an artificial delay. 

As far as I know, this applies 1.2.8 (even though I looked at 1.2.4 for the 
fix)

 Martin

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