carterkozak commented on PR #1410:
URL: https://github.com/apache/logging-log4j2/pull/1410#issuecomment-1499042526

   > we noticed that there are code paths that avoid 
SynchronizeEnqueueWhenQueueFull and may be responsible for RingBuffer corruption
   
   The ringbuffer we use is configured for multi-producer-single-consumer, 
where concurrent requests to add data should be safe. We added the 
synchronization for a slightly different reason: When the buffer is full, each 
time an event is processed, the background thread will notify _all_ waiting 
threads. In a large web-server, this can be a lot of threads, and the system 
degrades into a state where most cpu time is spent notifying threads. The 
synchronization allows us to queue waiting threads efficiently when the buffer 
is full.
   
   What is the rate at which the corrupted state reproduces in your 
environment? I ran into a similar issue at one point which reproduced once 
every few months, using the SYNCHRONOUS queue-full-policy (writing logevents 
from the current thread rather than blocking waiting to enqueue) for 
non-discarded events seemed to resolve it (if it does occur, data would be 
logged synchronously, but my metrics indicate that the queue is never entirely 
filled either).


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to