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