qos-ch / reload4j

reload4j is a drop-in replacement for log4j 1.2.17
Apache License 2.0
148 stars 22 forks source link

Potential Deadlock issues while logging in a high volume multi threaded java application #75

Closed rohitnitk2004 closed 4 months ago

rohitnitk2004 commented 4 months ago

reload4j v1.2.24

Thread-5 is stuck and below is thread dump.

AsyncAppender-Dispatcher-Thread-0" #21 daemon prio=5 os_prio=0 tid=0x00007f13d2338000 nid=0x2454d waiting for monitor entry [0x00007f13a171a000] java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.log4j.Category.callAppenders(Category.java:192)

"Thread-5" #170 prio=5 os_prio=0 tid=0x00007f13b85d1000 nid=0x2680f in Object.wait() [0x00007f1396c20000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:502) at org.apache.log4j.AsyncAppender.append(AsyncAppender.java:190)

ceki commented 4 months ago

Can you please provide your log4j configuration? Which version of the JDK? OS?

rohitnitk2004 commented 4 months ago

snipp Linux 3.10.0-1160.105.1.el7.x86_64 x86_64 GNU/Linux

openjdk version "1.8.0_302"

`

public class MyLog4JAppender implements Appender, OptionHandler { private final AppenderSkeleton delegate; public MyLog4JAppender() { delegate = new ConsoleAppender(); delegate.setThreshold(Level.INFO); delegate.setLayout(new PatternLayout("%-5p %d{ISO8601} %c{1} %x - %m%n")); } `
ceki commented 4 months ago

@rohitnitk2004 Writing to the console is known to be very slow and can also be blocked via the key boaard (Ctrl-Q). However, I think relaod4j's AsyncAppender can be simplified and improved.

rohitnitk2004 commented 4 months ago

@rohitnitk2004 Writing to the console is known to be very slow and can also be blocked via the key boaard (Ctrl-Q). However, I think relaod4j's AsyncAppender can be simplified and improved.

yes but in this case; we are experiencing deadlocks. looking at stacktrace; looks like buffer is full and appender is waiting on dispatcher notification which is contending for locking root logger held by appender

Thread-5 at org.apache.log4j.Category.callAppenders(Category.java:194)

AsyncAppender-Dispatcher at org.apache.log4j.Category.callAppenders(Category.java:192)