We have hit a problem with log4j 1.29 this is causing the lock contention
and as a result of this the CPU does not load. This stops the application
scaling.
We are using a JDBC appender for application auditing and are dumping to a
database certain request elements. The set up is
client -> async appender --> jdbc appender
We have lots of threads waiting for a lock:
"ExecuteThread: '23' for queue: 'weblogic.kernel.Default'" daemon prio=5
tid=0x0082a510 nid=0x26 waiting for monitor entry [89bfe000..89bffc28]
at org.apache.log4j.Category.callAppenders(Category.java:186)
- waiting to lock <0x9e4d9090> (a org.apache.log4j.Logger)
at org.apache.log4j.Category.forcedLog(Category.java:372)
at org.apache.log4j.Category.log(Category.java:864)
at uk.zoop.core.logging.Logger.writeLog(Unknown Source)
at uk.zoop.si.SILoggingUtils.logAuditInfo(Unknown Source)
at uk.zoop.si.chain.Audit.execute(Unknown Source)
at
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:166)
at uk.zoop.si.chain.Head.execute(Unknown Source)
at uk.zoop.si.listeners.http.HTTPSILChainServlet.doService(Unknown
Source)
at uk.zoop.si.listeners.http.HTTPSILChainServlet.doPost(Unknown
Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
at
weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at
weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
at
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6718)
at
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at
weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at
weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3764)
at
weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2644)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
This lock is held by:
"ExecuteThread: '18' for queue: 'weblogic.kernel.Default'" daemon prio=5
tid=0x00e42ca0 nid=0x21 in Object.wait() [8a0fe000..8a0ffc28]
at java.lang.Object.wait(Native Method)
- waiting on <0x9e4d0620> (a org.apache.log4j.helpers.BoundedFIFO)
at java.lang.Object.wait(Object.java:429)
at org.apache.log4j.AsyncAppender.append(AsyncAppender.java:85)
- locked <0x9e4d0620> (a org.apache.log4j.helpers.BoundedFIFO)
at
org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:221)
- locked <0x9e5739a0> (a org.apache.log4j.AsyncAppender)
at
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:57)
at org.apache.log4j.Category.callAppenders(Category.java:187)
- locked <0x9e4d9090> (a org.apache.log4j.Logger)
at org.apache.log4j.Category.forcedLog(Category.java:372)
at org.apache.log4j.Category.log(Category.java:864)
at uk.zoop.core.logging.Logger.writeLog(Unknown Source)
at uk.zoop.si.SILoggingUtils.logAuditInfo(Unknown Source)
at uk.zoop.si.chain.Audit.execute(Unknown Source)
at
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:166)
at uk.zoop.si.chain.Head.execute(Unknown Source)
at uk.zoop.si.listeners.http.HTTPSILChainServlet.doService(Unknown
Source)
at uk.zoop.si.listeners.http.HTTPSILChainServlet.doPost(Unknown
Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
at
weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at
weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
at
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6718)
at
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at
weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at
weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3764)
at
weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2644)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
and this thread appears to be in an apparent deadlock. This sounds like the
following problem:
http://issues.apache.org/bugzilla/show_bug.cgi?id=24159
http://www.jboss.org/index.html?module=bb&op=viewtopic&t=56740
Is this a common problem with log4j under high load and with a JDBC appender
and are there any ways around this? I have been using log4j for sometime but
never the JDBC appender. Thoughts are moving to 1.3 and adding the changes
suggested in 24159.
Any other ideas are welcome as we may not be able to move to 1.3 due to BEA
not supporting it?
TIA
John Dewsnip
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]