John, Just a quick thought. What about using a JMS Appender out of Log4J to an MDB to handle the JDBC communications?
Jim On 8/10/05, John Dewsnip <[EMAIL PROTECTED]> wrote: > > 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] > >
