Even if you configure multiple AsyncLoggers, there will be only one shared ring buffer. For AsyncAppender, there will be one ArrayBlockingQueue + Thread for every AsyncAppender configured.
The ring buffer used by AsyncLoggers is pre-allocated with RingBufferLogEvent objects and with the default size the empty ring buffer will take up about 30MB of memory. The number of slots will remain constant during the life of the application. With AsyncAppender the queue is unbounded and will keep growing if you are logging events faster than the underlying Appender can handle them. Which is better in terms of throughput? I haven't compared multiple AsyncAppenders to multiple AsyncLoggers so I don't know. If you want to confirm this you can take a look at the performance test classes in org.apache.logging.log4j.core.async.perftest and modify them for the scenario you want to test. I would be very interested to hear your results. Best regards, Remko On Thu, Oct 3, 2013 at 8:21 PM, Sudharma Puranik <[email protected] > wrote: > Oh wonderful, So it means to me that the difference is w.r.t the mechanism > used which makes the throughput better. So for AsyncLoggers , it uses > disruptor which has immense difference in performance compared to the > ArrayBlockingQueue. > > But when I have multiple AsyncLoggers , that is mutiple logger entries in > logger tag, And I have multiple AsyncAppenders , I see that for AsnycLogger > only single thread is created but for multiple AsyncAppenders multiple > threads are created so which is better? > > -Sudharma > > > On Thu, Oct 3, 2013 at 4:20 PM, Remko Popma <[email protected]> wrote: > >> You're welcome. >> >> Christian's blog post has more details on the difference: >> http://www.javacodegeeks.com/2013/07/log4j-2-performance-close-to-insane.html >> >> Best regards, >> Remko >> >> Sent from my iPhone >> >> On 2013/10/03, at 19:41, Sudharma Puranik <[email protected]> >> wrote: >> >> ok, Thanks a lot for your quick reply, I actually wanted to have >> asynchronous logging so I had previously done AsyncAppenders then I am >> testing AsyncLoggers but frankly I am unable to understand the difference >> between these. Can you please provide any blog of yours or any >> explanination you have handy? >> >> Thanks lot for your time >> >> -Sudharma >> >> >> On Thu, Oct 3, 2013 at 4:06 PM, Remko Popma <[email protected]>wrote: >> >>> Yes, waiting at that location means that the async logging thread is >>> waiting for new work to arrive. Assuming log events are appearing in the >>> log file correctly, I don't see any issue. >>> >>> Best regards, >>> Remko >>> >>> Sent from my iPhone >>> >>> On 2013/10/03, at 19:28, Sudharma Puranik <[email protected]> >>> wrote: >>> >>> This is the dump log >>> >>> >>> "AsyncLogger-1" daemon prio=6 tid=0x000000000dd3f800 nid=0x3444 runnable >>> [0x000000000f46f000] >>> java.lang.Thread.State: TIMED_WAITING (parking) >>> at sun.misc.Unsafe.park(Native Method) >>> at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:349) >>> at >>> com.lmax.disruptor.SleepingWaitStrategy.applyWaitMethod(SleepingWaitStrategy.java:66) >>> at >>> com.lmax.disruptor.SleepingWaitStrategy.waitFor(SleepingWaitStrategy.java:39) >>> at >>> com.lmax.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:55) >>> at >>> com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:123) >>> at >>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) >>> at >>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) >>> at java.lang.Thread.run(Thread.java:722) >>> >>> So do you think it is normal?? >>> >>> -Sudharma >>> >>> >>> On Thu, Oct 3, 2013 at 3:49 PM, Remko Popma <[email protected]>wrote: >>> >>>> If the events are being logged correctly I don't think there is a >>>> problem. The async logger thread is either waiting for more work (log >>>> events) to arrive from the ring buffer, or it has written to the disk and >>>> it is blocked (waiting) for the I/O call to return. >>>> >>>> Best regards, >>>> Remko >>>> >>>> Sent from my iPhone >>>> >>>> On 2013/10/03, at 19:02, Sudharma Puranik <[email protected]> >>>> wrote: >>>> >>>> Yes I see log messages getting updated. >>>> >>>> >>>> On Thu, Oct 3, 2013 at 2:54 PM, Remko Popma <[email protected]>wrote: >>>> >>>>> Are you seeing log messages in your log file? >>>>> >>>>> Sent from my iPhone >>>>> >>>>> > On 2013/10/03, at 18:21, Sudharma Puranik < >>>>> [email protected]> wrote: >>>>> > >>>>> > Hello, >>>>> > >>>>> > I have created a complete asyncLogger and have started my >>>>> application, While looking at the thread dump I See that the AsyncLogger >>>>> is >>>>> always waiting eventhough my logging is continuously happening. Can you >>>>> please help me in understanding If I am doing something wrong. Attached >>>>> is >>>>> the dump snap. >>>>> > >>>>> > <image.png> >>>>> > >>>>> > Sudharma >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: [email protected] >>>>> For additional commands, e-mail: [email protected] >>>>> >>>>> >>>> >>> >> >
