This probably warrants an enhancement to Log4jContextFactory. I can imagine 
other use cases where defaulting to BasicContextSelector also makes sense.

Ralph

On Jul 29, 2013, at 8:02 AM, Ralph Goers wrote:

> In your environment I would definitely recommend using BasicContextSelector 
> as you are unlikely to have need for multiple LoggerContexts.
> 
> Ralph
> 
> On Jul 29, 2013, at 7:08 AM, SMITH, CURTIS wrote:
> 
>> Hi guys,  I mentioned this observation last week, that my embedded single 
>> core env, the VM also does not support reflection.  Is reflection used in 
>> the hot path of logging that might be affecting my testing of V2 using more 
>> CPU than v1?
>> 
>>>>> LOGGER.debug("sun.reflect.Reflection is not installed");   // 
>>>>> ï∞ƒ----------------------------
>> 
>> I get this log at VM startup time.
>> 
>> Curt
>> ------------------------
>> 
>> 
>> package org.apache.logging.log4j.core.selector;
>> 
>> public class ClassLoaderContextSelector implements ContextSelector {
>> 
>> private static void setupCallerCheck() {
>> 223         try {
>> 224             final ClassLoader loader = Loader.getClassLoader();
>> 225             final Class clazz = 
>> loader.loadClass("sun.reflect.Reflection");
>> 226             final Method[] methods = clazz.getMethods();
>> 227             for (final Method method : methods) {
>> 228                 final int modifier = method.getModifiers();
>> 229                 if (method.getName().equals("getCallerClass") && 
>> Modifier.isStatic(modifier)) {
>> 230                     getCallerClass = method;
>> 231                     break;
>> 232                 }
>> 233             }
>> 234         } catch (final ClassNotFoundException cnfe) {
>> 235             LOGGER.debug("sun.reflect.Reflection is not installed");   
>> // ï∞ƒ----------------------------
>> 236         
>> 
>> -----Original Message-----
>> From: Remko Popma [mailto:[email protected]] 
>> Sent: Saturday, July 27, 2013 5:40 AM
>> To: Log4J Users List; Remko Popma
>> Subject: Re: async logger on slow single core env performs 50% worse than 
>> log4j v1
>> 
>> I quickly reviewed the code and as far as I can tell:
>> * only the following places in Log4j-2 will create a permanent thread in 
>> addition to your application threads:Â AsyncLoggers, AsyncAppenders, 
>> o.a.l.l.c.net.SocketServer, o.a.l.l.c.net.UDPSocketServer and 
>> o.a.l.l.c.helpers.*CachedClock
>> * synchronous logging will not create any threads
>> * RollingFile creates a short-lived thread for the roll-over, *only*Â if the 
>> old file needs to be compressed to a .zip or .gz file (the file rename 
>> action is synchronous)
>> 
>> So I'm thinking that the difference in CPU usage is caused by something 
>> other than threads or async logging.
>> I'd be interested in your answers to my questions below.
>> 
>> Best regards,
>> Remko
>> 
>> 
>> ________________________________
>> From: Remko Popma <[email protected]>
>> To: Log4J Users List <[email protected]> 
>> Sent: Saturday, July 27, 2013 12:53 PM
>> Subject: Re: async logger on slow single core env performs 50% worse than 
>> log4j v1
>> 
>> 
>> I don't think we've ever done any performance testing on the kind of 
>> environment you describe, so this is great feedback, thanks!
>> 
>> First, configuration via XML instead of sys props is on the todo list.
>> 
>> Second, you mentioned you use system property "AsyncLoggerContextSelector" 
>> to switch on AsyncLoggers.
>> This is incorrect. The correct key is "Log4jContextSelector" (and that would 
>> explain why removing this setting made no difference).
>> 
>> Third, if I understand correctly you are essentially logging to a 
>> memory-mapped file. In that case any buffering is just wasting CPU 
>> resources, so you should not use the Fast*File appenders as their buffering 
>> cannot be switched off. (Non-Fast) FileAppenders also use bufferedIO=true by 
>> default, but you can switch this off in config. I would expect this to save 
>> some CPU.
>> 
>> On that note, you mentioned CPU usage as your performance measure. Is that 
>> the most important number? Do you have any throughput/latency goals?
>> Do you have any tools on your platform to see what the CPU is doing? Which 
>> threads are busy for example?
>> 
>> In terms of GC, making all loggers Async has a small benefit in that it 
>> re-uses log event objects.
>> 
>> 
>> I am still intrigued by the difference in CPU usage you mention between 
>> log4j-1.2 and 2.0. Is your application code exactly the same? Or do you use 
>> the pattern formats that are now available in log4j-2.0?
>> 
>> Regards,
>> Remko
>> 
>> 
>> ________________________________
>> From: "SMITH, CURTIS" <[email protected]>
>> To: Log4J Users List <[email protected]> 
>> Sent: Saturday, July 27, 2013 6:55 AM
>> Subject: RE: async logger on slow single core env performs 50% worse than 
>> log4j v1
>> 
>> 
>> LOL well that's obvious now.  :)  It was more a case of wishful thinking 
>> and why not give it a "try".    But it's still odd that my attempts to 
>> slim it down It's still 2x worse than v1.  Something else is in play.
>> 
>> curt
>> 
>> -----Original Message-----
>> From: Ralph Goers [mailto:[email protected]] 
>> Sent: Friday, July 26, 2013 5:34 PM
>> To: Log4J Users List
>> Subject: Re: async logger on slow single core env performs 50% worse than 
>> log4j v1
>> 
>> I'm curious why you are even trying to use Async anything with a single core 
>> environment (unless it is hyper-threaded). Only 1 thread can be active at a 
>> time so when you switch threads the active thread will just stop. This won't 
>> gain you any additional throughput but you will still incur the additional 
>> overhead of thread management and locking.
>> 
>> Ralph
>> 
>> On Jul 26, 2013, at 1:55 PM, SMITH, CURTIS wrote:
>> 
>>> I removed  System.setProperty("AsyncLoggerContextSelector", 
>>> "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
>>> No change in CPU, but going from FastRollingFile to RollingFile I got back 
>>> 10% of my lost CPU.  Still at 40% CPU where v1 runs at 20%.
>>> 
>>> I would like to get down to the equivalent behavior as we got from log4j 
>>> v1, then try v2 features to get it better.  Since I'm still seeing worse 
>>> performance, I'm guessing that there's still one or more threads under the 
>>> hood vs V1 with:Â  sync Logger and RollingFile.
>>> 
>>> Any guesses for me to try?
>>> 
>>> Tnx curt
>>> 
>>> _____________________________________________
>>> From: SMITH, CURTIS
>>> Sent: Friday, July 26, 2013 1:16 PM
>>> To: [email protected]
>>> Subject: async logger on slow single core env performs 50% worse than log4j 
>>> v1
>>> 
>>> 
>>> I suspect a slow single core env is a new scenario for v2 and async 
>>> logger.   My view is that there's a mis match between v2's async logger 
>>> thread design that works great on multi-core envs and this embedded slow 
>>> single core env...   Sooo I need to try a few different configurations to 
>>> see what does run best on a slow single core...
>>> 
>>> But I need your tips as to what I might change / tune to get v2 to perform 
>>> as good or better than v1 in a single core env.
>>> 
>>> FWIW:  log4j v1 ran my standard use case test averaging 20% CPU.  Log4j 
>>> v2 ran at 50% CPU, so more than 2x worse.
>>> 
>>> Our business logic is highly threaded so any subsystem that has a "hot" 
>>> thread like this config that has 5 loggers and 3 appenders I might be 
>>> shooting myself in the foot.  You know this new design the best so I'm 
>>> open as to what to pick and choose from v2 that is likely to perform the 
>>> best?
>>> 
>>> FYI:Â  I feel using system properties vs exclusively using declarative 
>>> configuration all within the log4j2.xml separates out configuration.  I'd 
>>> prefer to not have to use system properties for any configuration.
>>> 
>>> My first experiment will be to remove the async logger property.
>>> 
>>> Any thoughts re the FastRollingFile appender or any other tuning that might 
>>> be better for a single core env.  It's a slow Arm v5 or so, pretty old and 
>>> lacking the better context switching features of newer chips.  The VM is 
>>> also slow,  IBM J9 J2ME JDK1.6.   Benchmarking the J9 vs Oracle J2ME, J9 
>>> is real slow and poor at thread context switching.  But you get what you 
>>> pay for, J9 is also real cheap.
>>> 
>>> ******
>>> ******
>>> Note:  the log files are on /tmp a memory FS in our env.  So the worst 
>>> case of a synchronous logger from the same thread as the logger.debug call 
>>> may not perform that badly thanks to Linux FS buffering and memfs having 
>>> low latency.  Just mentioning.
>>> 
>>> 
>>> // Manually set the log4j v2 async logger tuning parameters here.  DLA 
>>> does not have a system property
>>> Â  Â  Â  Â  Â  Â  Â  Â  // property file
>>> Â  Â  Â  Â  Â  Â  Â  Â  System.setProperty("AsyncLoggerContextSelector", 
>>> "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
>>> Â  Â  Â  Â  Â  Â  Â  Â  System.setProperty("AsyncLogger.RingBufferSize", 
>>> "128");Â  Â  Â  Â  // min size permissable to keep memory low
>>> Â  Â  Â  Â  Â  Â  Â  Â  System.setProperty("AsyncLogger.WaitStrategy", 
>>> "Block");Â  Â  Â  Â  // less CPU, better for embedded env
>>> Â  Â  Â  Â  Â  Â  Â  Â  System.setProperty("log4j2.disable.jmx", "true");Â  
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â Â  // saves on a jmx jar and we don't use JMX 
>>> anyway
>>> 
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <configuration status="trace" level="trace" >Â  <!-- log4j v2 debug add 
>>> these: status="trace" level="trace" -->
>>> Â  Â  Â  Â  <appenders>
>>> Â  Â  Â  Â  Â  Â  Â  Â  <FastRollingFile name="DLA"
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  fileName="/tmp/att/sync/log/dla.log"
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  
>>> filePattern="/tmp/att/sync/log/dla.log.%i" append="true">
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <PatternLayout>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  
>>> <pattern>[%d][%-5p][%-15t][%-15c{1}]:%m%n</pattern>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  </PatternLayout>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <Policies>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <SizeBasedTriggeringPolicy 
>>> size="3 MB" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  </Policies>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <DefaultRolloverStrategy max="2" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  </FastRollingFile>
>>> Â  Â  Â  Â  Â  Â  Â  Â  <FastRollingFile name="DEVICES"
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  
>>> fileName="/tmp/att/sync/log/dla_devices.log"
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  
>>> filePattern="/tmp/att/sync/log/dla_devices.log.%i" append="true">
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <PatternLayout>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  
>>> <pattern>[%d][%-5p][%-15t][%-15c{1}]:%m%n</pattern>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  </PatternLayout>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <Policies>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <SizeBasedTriggeringPolicy 
>>> size="3 MB" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  </Policies>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <DefaultRolloverStrategy max="1" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  </FastRollingFile>
>>> Â  Â  Â  Â  Â  Â  Â  Â  <FastRollingFile name="VIDEO"
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  
>>> fileName="/tmp/att/sync/log/dla_video.log"
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  
>>> filePattern="/tmp/att/sync/log/dla_video.log.%i" append="true">
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <PatternLayout>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  
>>> <pattern>[%d][%-5p][%-15t][%-15c{1}]:%m%n</pattern>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  </PatternLayout>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <Policies>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <SizeBasedTriggeringPolicy 
>>> size="3 MB" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  </Policies>
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <DefaultRolloverStrategy max="1" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  </FastRollingFile>
>>> Â  Â  Â  Â  Â  Â  Â  Â  <Console name="CO" target="SYSTEM_OUT">
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <PatternLayout pattern="%d %-5p [%t] 
>>> %C{2} (%F:%L) - %m%n" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  </Console>
>>> Â  Â  Â  Â  </appenders>
>>> Â  Â  Â  Â  <loggers>
>>> Â  Â  Â  Â  Â  Â  Â  Â  <logger name="com.att.dlc.afm" additivity="false" >
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <appender-ref ref="DLA" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  </logger>
>>> Â  Â  Â  Â  Â  Â  Â  Â  <logger name="com.att.dlc.devices" 
>>> additivity="false" level="debug">
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <appender-ref ref="DEVICES" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  </logger>
>>> Â  Â  Â  Â  Â  Â  Â  Â  <logger name="com.att.dlc.util.serialport" 
>>> additivity="false" level="debug">
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <appender-ref ref="DEVICES" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  </logger>
>>> Â  Â  Â  Â  Â  Â  Â  Â  <logger name="com.att.dlc.webcamserver" 
>>> additivity="false" level="debug">
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <appender-ref ref="VIDEO" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  </logger>
>>> Â  Â  Â  Â  Â  Â  Â  Â  <logger name="com.att.dlc.devices.cameras" 
>>> additivity="false" level="debug">
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <appender-ref ref="VIDEO" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  </logger>
>>> Â  Â  Â  Â  Â  Â  Â  Â  <root level="debug">
>>> Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  <appender-ref ref="DLA" />
>>> Â  Â  Â  Â  Â  Â  Â  Â  </root>
>>> Â  Â  Â  Â  </loggers>
>>> </configuration>
>>> 
>>> Curt Smith
>>> AT&T Digital Life
>>> DLC Software Development
>>> 404-499-7013
>>> (cell) 678-365-6508
>>> 
>>> 
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>> ‹¢ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ‹‹¥FòVç7V'67&ˆ&RÂRÖֈâÆösF¢◊W6W"◊Vç7V'67&ˆ&TÆövvˆæræ6∫Ræ÷&p‹¤f÷"FF˜FˆöæÂ6öÖÖæG2ÂRÖֈâÆösF¢◊W6W"Ö∫VÇÆövvˆæræ6∫Ræ÷&p‹
>>  
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to