This issue has been recorded as bug #LOGCXX-194.
> -----Original Message----- > From: BUNBURY Myles > Sent: Monday, October 01, 2007 12:05 PM > To: Log4CXX User > Subject: RE: Log4cxx wilting under heavy load > > > -----Original Message----- > > From: Curt Arnold [mailto:[EMAIL PROTECTED] > > Sent: Friday, September 28, 2007 6:11 PM > > To: Log4CXX User > > Subject: Re: Log4cxx wilting under heavy load > > > > > > On Sep 28, 2007, at 4:27 PM, BUNBURY Myles wrote: > > > > > Log4cxx seems to wilt when under heavy load. > > > > > > With the syslog appender enabled, the application cores > when under > > > heavy load. > > > > > > When using a RollingFileAppender with an XMLLayout layout, my > > > output file gets garbled: > > > > > > <<<snip>>> > > > > > > <log4j:event logger="Gateway.AuthenticationServices/ > > > ANS_AuthenticationService.cpp" timestamp="1191005220721" > > > level="INFO" thread="0x61eb3b90"> > > > <log4j:message><![CDATA[No username/password token or SAML > > > assertion to process.]]></log4j:message> > > > </log4j:event> > > > <log4j:event logger="Gateway.MediationPipeline/ > > > MED_PipelineMessage.cpp" timestamp="1191005220721" level="INFO" > > > thread="0x61eb3b90"> > > > <log4j:message><![CDATA[No session policy set for > user/group .]]></ > > > log4j:message> > > > </log4j:event> > > > <log4j:event logger="Gateway.MediationPipeline/ > > > MED_PipelineMessage.cpp" timestamp="1191005220721" level="DEBUG" > > > thread="0x61eb3b90"> > > > <log4j:message><![CDATA[Using session #2 with session policy > > > DefaultPolicy.]]></log4j:message> > > > </log4j:event> > > > <log4j:event logger="Gateway.SessionInfra/SI_SessionManager.cpp" > > > timestamp="1191005220729" level="WARN" thread="0x5ecaeb90"> > > > <log4j:message><![CDATA[Concurrent session limit reached. > > > Transaction is rejected.]]></log4j:message> > > > </log4j:event> > > > <log4j:event logger="Gateway.SessionInfra/SI_SessionManager.cpp" > > > timestamp="1191005220729" level="ERROR" thread="0x5ecaeb90"> > > > <log4j:message><![CDATA[User session rejected - have > exceeded the > > > maximum number of concurrent sessions based on the > current license > > > (0 concurrent sessions allowed)]]></log4j:message> > > > </log4j:event> > > > ¦« " ´T# > > > ýÍÊ^˜ÌÊ^Ä °Ñ" > > > ôÌÊ^µ ‡·<T# > > > ÜÑ" > > > XÍÊ^ <T# > > > ÜÑ" > > > À4‡· dÐÊ^ÍÊ^§c ´T# > > > ð‡·°Ñ" > > > @ÍÊ^1Ö†· T# > > > ¸Ñ" > > > XÍÊ^ ôO ÔÑ" > > > |ó³ hÍÊ^ > > > Þ$z XÍÊ^p÷³ xÍÊ^/&L4# > > > z ¸ÍÊ^Z;'°Ñ" > > > ¸ÍÊ^ü(H4# > > > ðÍÊ^¸ÍÊ^13 Ì€ðÍÊ^ðÍÊ^ > > > > > > Þ$z ÏÊ^ÄydÐÊ^ðÍÊ^ ðÍÊ^ > > > ÏÊ^PÏÊ^XÏÊ^h ·‹· > > > 1191‘À‹·20729&ô €¼ÏÊ^(ÎÊ^®Ý‹· €È > > > €—ÎÊ^H€¼ÏÊ^H €@ € ô5 À > > > € €À€ ¼ÏÊ^xÎÊ^ € > > > Ðõ‹··‹·ôO À€ ˆÎÊ^@ €‹‚& > > > ·‹· X~—·¨ÎÊ^5 > > > ´ dÐÊ^Þ$¸ÎÊ^ H& çÎÊ^ÏÊ^^¥!øÎÊ^°# > > > ÏÊ^§c % > > > ôèÎÊ^ðÆ0ÐÊ^'ÏÊ^øÎÊ^ÙÃ'ÏÊ^'ÏÊ^ > > > (ÏÊ^žÇ'ÏÊ^'ÏÊ^SÏÊ^ͦ!\sA > > > dÐÊ^(ÏÊ^%LRÏÊ^´ÏÊ^XÏÊ^ÖÇRÏÊ^SÏÊ^RÏÊ^¶0 \sA > > > kÏÊ^XÏÊ^¶&$HsA > > > dÐÊ^ÈÏÊ^¦«0ÐÊ^Þ > > > $xÏÊ^íÃHÐÊ^ÿÿÿÿˆÏÊ^ÄHÐÊ^l4¸ÏÊ^6ÉHÐÊ^ > > > ó ôO l4z ÈÏÊ^e4 HÐÊ^dÐÊ^ÈÏÊ^uÉHÐÊ^Þ > > > [EMAIL PROTECTED] HÒÊ^ÑÊ^ÿÿÿÿ‘â³ Z;'°Ñ" > > > j 8ÐÊ^ü(0x5ecaeb90Ê^13 4€pÐÊ^pÐÊ^ Þ$z > > > HÐÊ^Í&ä6% > > > 4ÐÊ^4ÐÊ^ ˆÐÊ^ > > > *à6% > > > LÐÊ^LÐÊ^ Üí# > > > Ì€˜ÐÊ^<log4j:event logger="Gateway.SessionInfra/ > > > SI_SessionManager.cpp" timestamp="1191005220729" level="WARN" > > > thread="0x600b0b90"> > > > <log4j:message><![CDATA[Concurrent session limit reached. > > > Transaction is rejected.]]></log4j:message> > > > </log4j:event> > > > <log4j:event logger="Gateway.MediationPipeline/ > > > MED_PipelineMessage.cpp" timestamp="1191005220729" level="INFO" > > > thread="0x5ecaeb90"> > > > <log4j:message><![CDATA[Auth'ed user hitting dend. > Transaction is > > > rejected.]]></log4j:message> > > > </log4j:event> > > > <log4j:event logger="Gateway.MediationPipeline/ > > > MED_PipelineMessage.cpp" timestamp="1191005220729" level="INFO" > > > thread="0x5ecaeb90"> > > > <log4j:message><![CDATA[Auth'ed user hitting deny-all ws]]></ > > > log4j:message> > > > </log4j:event> > > > <log4j:event logger="Gateway.SessionInfra/SI_SessionManager.cpp" > > > timestamp="1191005220729" level="ERROR" thread="0x600b0b90"> > > > <log4j:message><![CDATA[User session rejected - have > exceeded the > > > maximum number of concurrent sessions based on the > current license > > > (0 concurrent sessions allowed)]]></log4j:message> > > > </log4j:event> > > > > > > <<<snip>>> > > > > > > This output was generated with ~150 threads throwing out error > > > messages in rapid succession. > > > > > > I have not noted these problems when treading lightly on > the system. > > > > > > At this point I'm suspicious that log4cxx is overflowing > some sort > > > of output buffer that's fills up due to the volume. I don't > > believe > > > it is a multithreading issue as I serialized the logging > calls in > > > my code with a mutex and did not note any change. > > > > > > Has anyone else noted something similiar? > > > > > > How is log4cxx supposed to behave when the logging volume > exceeds > > > its capacity to output those events? > > > > > > > There was a similar symptoms reported in https://issues.apache.org/ > > jira/browse/LOGCXX-186. That ended up being due to attempting to > > configure log4cxx simultaneously on multiple threads. I > assume that > > is not the case with you, but could you confirm that the problem > > persists if you configure and attempt a logging request prior to > > launching threads (assuming that your app is the one launching the > > threads). > > > > If that is not the case, then the previous bug report might be > > instructive to try to identify and fix the problem. The problems > > might be related, but perhaps not. I would focus on trying to > > identify the one that is most significant to you and then > see if any > > resolution fixed the other. > > > > I would suggest: > > > > 1. Make sure that you are using the most current SVN HEAD. > > > > 2. Making sure that configuration and some initial log > > requests occur > > before threads are launched. (previously mentioned). > > > > 3. Wrap the failing appender in the soon to be committed > rewrite of > > AsyncAppender (if not in the next hour or so, at least by mid-day > > tomorrow). AsyncAppender has been badly flawed. I'm just > about the > > commit a port of the log4j 1.2.14 AsyncAppender (which replaced an > > earlier log4j implementation that was badly flawed too). > > That should > > have the affect of bringing all appends on the underlying appender > > down to a common thread. Plus it would be a great stress > > test of all > > my new code (thanks for volunteering for testing). > > > > 4. Simplify, simplify. There are a couple of places that > corruption > > may be occurring. It could be an Appender problem, a Layout > > problem, > > a CharsetEncoder problem, a CharsetDecoder problem or some > > combination. Trying to isolate the problem makes resolution a lot > > easier. > > a) Setting LOG4CXX_LOGCHAR_IS_UTF8 would replace an > conversion > > between the local code page and UTF-8 with a straight copy. > > Eliminating a lot of complexity and potential source of problems. > > b) Replace the layout (if there is one) with something > > simpler. > > First try simplifying the pattern as much as possible like %m%n. > > c) See if the problem occurs with the simpler appenders > > (FileAppender instead of RollingFileAppender) or other unrelated > > appenders. > > > > 5. Attempt to recreate the problem in a sample app that you can > > attach to a bug report. Please specify all specifics of the > > configurations (operating system, compiler, type and number of > > processors, etc) that have been tested and whether they fail > > consistently, have not been observed to fail or somewhere > in between. > > > > 6. If you are running on a x86 Unix, valgrind could be useful to > > identify potential problems. I used the helgrind tool in earlier > > versions of valgrind (its been broken for a while, so had to > > build it > > from source) to identify potential race conditions. Other tools > > might be useful to identify the problem. > > > > Firstly, the relevant portions of the log4cxx.properties file > might be a useful reference: > > --- > log4j.appender.file=org.apache.log4j.RollingFileAppender > log4j.appender.file.File=${WSG_HOME}/grizzlyGW.log > log4j.appender.file.MaxFileSize=10000KB > log4j.appender.file.MaxBackupIndex=10 > log4j.appender.file.layout=org.apache.log4j.PatternLayout > log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %5p > [%c] (%F:%L) %t: %m%n > > log4j.appender.XMLFile=org.apache.log4j.RollingFileAppender > log4j.appender.XMLFile.File=${WSG_HOME}/grizzlyGW.xml > log4j.appender.XMLFile.MaxFileSize=10000KB > log4j.appender.XMLFile.MaxBackupIndex=10 > log4j.appender.XMLFile.layout=org.apache.log4j.xml.XMLLayout > > log4j.appender.file2=org.apache.log4j.FileAppender > log4j.appender.file2.File=${WSG_HOME}/grizzlyGW2.log > log4j.appender.file2.layout=org.apache.log4j.PatternLayout > log4j.appender.file2.layout.ConversionPattern=%m%n > > log4j.appender.XMLFileGateway=org.apache.log4j.RollingFileAppender > log4j.appender.XMLFileGateway.File=${WSG_HOME}/grizzlyGW2.xml > log4j.appender.XMLFileGateway.MaxFileSize=10000KB > log4j.appender.XMLFileGateway.MaxBackupIndex=10 > log4j.appender.XMLFileGateway.layout=org.apache.log4j.xml.XMLLayout > > log4j.rootLogger=off, XMLFile > log4j.logger.Gateway=warn, file2 > --- > > The following were all done without syncronizing log messages > as I mentioned trying before. The log4cxx code was based on > revision #572744, with the modifications I mentioned in > LOGCXX-191 (pre-"official" fix). As the modifications relate > to the syslog appender, and are relatively minor, I doubt > that they are influencing the results outlined below since > syslog is not involved in my tests. > > I tried forcing a log message in the same thread that > configured the logging system, immediately after the > configuration was done and before any threads started > pounding away. I did not note any change in behaviour, so I > went back to what I had before. > > > I simplified things down to a FileAppender appender with a > PatternLayout layout set to '%m%n': > log4j.rootLogger=off > log4j.logger.Gateway=debug, file2 > > The corrupt output was not visible in the log. > > > I readded the XMLFile appender to the root logger: > log4j.rootLogger=off, XMLFile > log4j.logger.Gateway=debug, file2 > > The corrupt output was visible in both the XML and plaintext logs. > > > I removed the simplified plaintext appender: > log4j.rootLogger=off, XMLFile > log4j.logger.Gateway=debug > > The corrupt output was not visible in the log. > > > I removed the simplified plaintext appender: > log4j.rootLogger=off, XMLFile > log4j.logger.Gateway=debug, XMLFileGateway > > The corrupt output was visible in both XML logs. > > > At this point, I'm starting to think it's got something to do > with either having multiple appenders on the go, or simply > something bad in the XML layout that garbles things for > subsequent appenders. > > > I tried two plaintext appenders. I reduced the 'file' > appender to a simple FileAppender with a pattern layout of '%m%n': > log4j.rootLogger=off, file > log4j.logger.Gateway=debug, file2 > > The corrupt output was visible in both plaintext logs. > > > At this point, it seems to me that the verdict is in: there's > a bug that corrupts data when multiple appenders (regardless > of type) are present. > > > For amusement, I tried combining appenders on a single logger: > log4j.rootLogger=off, file, file2 > log4j.logger.Gateway=debug > > The corrupt output was not visible in the logs. > > > For more amusement, I tried combining appenders on a single > logger other than the root logger: > log4j.rootLogger=off > log4j.logger.Gateway=debug, file, file2 > > The corrupt output was not visible in the logs. > > > Since I'm guessing the 'OFF' level isn't used all that > commonly, I tried enabling the root logger with the appenders > on separate loggers: > log4j.rootLogger=info, file > log4j.logger.Gateway=debug, file2 > > The corrupt output was visible in both plaintext logs. > > > These extra tests confim my ealier verdict as to the cause. > > I will open a bug based on this information. I will post the > bug number to the user group when I have it. Further > information on this problem will be logged there. > > Next steps: > -Verify that the problem still exists in a clean copy of > SVN-HEAD. (I expect it does.) > -Determine whether the core dumps I experienced when using > the syslog appender are related to this same issue. > > > --- > > Myles Bunbury, P.Eng., BASc. > Software Development Engineering Specialist > Web Services Internal Venture > Alcatel-Lucent > > Phone: (613) 784-4325 > Fax: (613) 784-8944 > Web: www.alcatel-lucent.com
