[ https://issues.apache.org/jira/browse/LOG4J2-1221?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Remko Popma resolved LOG4J2-1221. --------------------------------- Resolution: Fixed Fix Version/s: 2.5.1 [~sakumar] Since the problem seems to be in the Disruptor library (https://github.com/LMAX-Exchange/disruptor/issues/138) there is a limit to what can be done in log4j. I did notice that the problem occurred when an extremely small ring buffer size (128) was configured and I strongly recommend using the much larger default ring buffer size; I think that will vastly reduce the chance of the problem happening again. On top of that, you can now determine what happens when the ring buffer is full. Please take a look at the [solution for LOG4J2 -1080|https://issues.apache.org/jira/browse/LOG4J2-1080?focusedCommentId=15069634&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15069634]. You can use this to create a workaround for your issue as follows. For example, if you want to start logging events synchronously when the ring buffer is full, you can do the following: * set system property {{log4j2.AsyncEventRouter}} to value {{com.mycompany.SampathKumarRouter}} * compile the class below and add it to your classpath {code} package com.mycompany; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.core.async.AsyncEventRouter; import org.apache.logging.log4j.core.async.EventRoute; public class SampathKumarRouter implements AsyncEventRouter { @Override public EventRoute getRoute(final long backgroundThreadId, final Level level, final int queueSize, final int queueRemainingCapacity) { // start logging synchronously when the queue is full, otherwise log asynchronously return queueRemainingCapacity == 0 ? EventRoute.SYNCHRONOUS : EventRoute.ENQUEUE; } } {code} > Dead lock observed in BlockingWaitStrategy in Log 4J > ---------------------------------------------------- > > Key: LOG4J2-1221 > URL: https://issues.apache.org/jira/browse/LOG4J2-1221 > Project: Log4j 2 > Issue Type: Bug > Components: Core > Affects Versions: 2.2 > Environment: log4J Version : 2.2 Disruptor Version : 3.3.2 > Ring Buffer Size : 128 > OS Version : > cat /etc/release > Oracle Solaris 11.2 X86 > Java Version > java version "1.7.0_45" > Java(TM) SE Runtime Environment (build 1.7.0_45-b18) > Java HotSpot(TM) Server VM (build 24.45-b08, mixed mode) > Reporter: Sampath Kumar > Priority: Critical > Labels: patch > Fix For: 2.5.1 > > Attachments: log4j2-test.xml > > > We have seen this behavior in during high load. Where Logging Got Stropped > and Application Went to not responsive state. > log4J Version : 2.2 Disruptor Version : 3.3.2 > Ring Buffer Size : 128 > Producer(Multiples Threads) and Consumer Threads(Single Thread As per Log 4J > Configuration) Started Waiting on each other. > Here is the one of the Trace from Thread Dump: > Producer : > "[ACTIVE] ExecuteThread: '7' for queue: 'weblogic.kernel.Default > (self-tuning)'" TIMED_WAITING > sun.misc.Unsafe.park(Native Method) > java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:349) > com.lmax.disruptor.MultiProducerSequencer.next(MultiProducerSequencer.java:136) > com.lmax.disruptor.MultiProducerSequencer.next(MultiProducerSequencer.java:105) > com.lmax.disruptor.RingBuffer.publishEvent(RingBuffer.java:444) > com.lmax.disruptor.dsl.Disruptor.publishEvent(Disruptor.java:256) > org.apache.logging.log4j.core.async.AsyncLogger.logMessage(AsyncLogger.java:285) > org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:722) > org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:693) > org.apache.logging.log4j.jcl.Log4jLog.debug(Log4jLog.java:81) > Consumer Thread : > "AsyncLogger-1" waiting for lock > java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5d972983 > WAITING > sun.misc.Unsafe.park(Native Method) > java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) > java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) > com.lmax.disruptor.BlockingWaitStrategy.waitFor(BlockingWaitStrategy.java:45) > com.lmax.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:55) > com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:123) > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > java.lang.Thread.run(Thread.java:744) > Is this is known issue which got already fixed in recent build ? -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-dev-h...@logging.apache.org