That could be. Having the snapshot with all the options enabled should be able to pinpoint what is using up the cpu time.
Ralph > On Nov 19, 2020, at 8:39 PM, Lisa Ruby <lbru...@protonmail.com> wrote: > > I did not grab the information from a Snapshot, just from the live capture on > the screen. I will send you a private email regarding giving you an entire > Snapshot. > > Regarding %logger{36}, I tested again, starting with my original xml config > file and removing only the %logger{36} from the Console pattern. I left the > RollingLogFile there this time and the application started in 6 seconds. So > that definitely appears to be where the issue is. I do have a separate Logger > for each of my classes. That wasn't a problem in Java 8, but maybe something > about that is causing an issue in Java 11? > > Lisa > > On 11/19/2020 6:06 PM, Ralph Goers wrote: >> I am assuming you captured the snapshot from your profiling session? If so >> it would be great it you could send it to me. I can email you privately with >> a dropbox location where you can place the file if that will work for you. >> >> FWIW, I find your results surprising as all %logger{36} should be doing is >> truncating the logger name and including it. I would have expected >> formatting the time or including the location info to be slower than dealing >> with the logger. >> >> Thanks, >> Ralph >> >>> On Nov 19, 2020, at 7:00 PM, Lisa Ruby <lbru...@protonmail.com >>> <mailto:lbru...@protonmail.com>> wrote: >>> >>> Hi, >>> >>> I have what I hope will be some useful information. I did what Volkan >>> suggested and removed each log option mostly one at a time. I've pasted in >>> the information I collected below. It appears that it's the %logger{36} >>> option that is making the Console logging go so slow. Taking out other >>> options speeds things up some, but taking out only %logger gets it to just >>> about the same performance as on Java 8. Maybe that's only because less >>> text is going to the Console? Don't know. Below this table is information >>> from Profiling. >>> >>> >>> Verified same things are being logged in both Java 8 and Java 11 >>> >>> >>> >>> Java Version Test Description Time in seconds for Startup >>> after Login Comments >>> 8 Baseline test with nothing changed in app or log4j2.xml file 4 >>> 11 Baseline test with nothing changed in app or log4j2.xml file 25.7 >>> 11 Removed Rolling Log File logging from log4j2.xml. So Console only >>> logging, no other changes to log4j2.xml 24.13 >>> 11 Removed only %L, Console only logging 23.78 >>> 11 Removed only [%t] Console only logging 16.79 >>> 11 Removed only %d{ISO8601}, Console only logging 18.11 >>> 11 Removed %d{ISO8601} and [%t], Console only logging 11.17 >>> 11 Removed only %logger{36}, Console only logging 5.89 >>> >>> >>> PROFILING >>> ----------------- >>> I downloaded a trial version of the YourKit Java Profiler and have tried >>> playing with it. I am running it as follows: >>> >>> I installed the Netbeans plugin >>> Set the Options to Startup with CPU Profiling/Sampling. >>> Ran Profile Main Project >>> I then logged into my application and once it's fully started I checked the >>> Method List and some other things >>> I don't see java.util.Stackwalker listed in the Method List >>> This is everything I see that is not my application class methods >>> >>> <pnbklipoafhdmcip.png> >>> >>> <olmafefjabpcodjc.png> >>> >>> >>> Here is what it shows for the Log4j2 Thread in the Events by Table >>> >>> <ealilbphadpnkmce.png> >>> >>> The profiler is also warning me that there may be some deadlocks. It is >>> beyond my knowledge level at this time to try to determine if there is >>> actually a problem. I suspect not, but don't know for sure. This is what it >>> tells me: >>> >>> <maephhbjpobfomco.png> >>> <efheigahggegodgi.png> >>> >>> >>> Let me know if there is any other information I can collect. >>> >>> Lisa >>> >>> On 11/19/2020 5:51 AM, Volkan Yazıcı wrote: >>>> In the light of what Ralph mentioned about %L pattern, @Lisa, would you >>>> mind seeing if simplifying the pattern (that is, removing certain >>>> directives bit by bit, e.g., starting with %L) helps? Pinning down the >>>> actual smoking gun would help us a lot. >>>> >>>> On Wed, Nov 18, 2020 at 4:50 PM Ralph Goers <ralph.go...@dslextreme.com >>>> <mailto:ralph.go...@dslextreme.com>> wrote: >>>> Is there any chance you could run your application under YourKit and >>>> profile startup? >>>> >>>> Your partner uses %L so each log event needs to locate the location of the >>>> caller. In Java 8 that used the com.sun.Reflection class but that was >>>> removed in Java 9 so in Java 11 it would be using java.util.StackWalker. I >>>> suspect the majority of the time will be there. I have made several >>>> attempts to make that faster but haven’t seemed to find something that >>>> works for everybody. So providing a profiling snapshot would help >>>> enormously. >>>> >>>> FWIW, Logging to the Console is known to be very slow, but I don’t believe >>>> it should have changed that much between Java 8 and 11. >>>> >>>> Ralph >>>> >>>> > On Nov 17, 2020, at 11:11 PM, Lisa Ruby <lbru...@protonmail.com >>>> > <mailto:lbru...@protonmail.com>.INVALID> wrote: >>>> > >>>> > I am working on moving my Java application development from Java 8 and >>>> > JavaFX 8 to Java 11 and JavaFX 11, and am seeing a large performance >>>> > degradation in log4j between Java 8 and Java 11. >>>> > >>>> > I've found these two issues that appear to have been addressed. Assuming >>>> > whatever changes/fixes were involved got included in the latest >>>> > releases, they have not fixed the issue I am seeing. >>>> > >>>> > https://github.com/line/armeria/issues/2306 >>>> > <https://github.com/line/armeria/issues/2306> >>>> > https://issues.apache.org/jira/browse/LOG4J2-2537 >>>> > <https://issues.apache.org/jira/browse/LOG4J2-2537> >>>> > >>>> > For Java 11 I am using AdoptOpenJDK version 11.0.2, OpenJFX version >>>> > 11.0.2, log4j version 2.14.0 (also tried 2.13.3, and 2.12.1), and >>>> > NetBeans 12.0. In my Java 8 implementation I'm using log4j 2.12.1. I can >>>> > supply JDK version if needed. >>>> > >>>> > Below is a general representation of what my log4j xml config file looks >>>> > like. It's the same for Java 8 as for Java 11. I have a Loggers entry >>>> > for each class in my application. They are all specified the same as the >>>> > one shown here. In each class file I have code that looks like this: >>>> > >>>> > private static final Logger logger = >>>> > LogManager.getLogger(ClassName.class.getName()); >>>> > >>>> > XML File Sample >>>> > >>>> > <?xml version="1.0" encoding="UTF-8"?> >>>> > <Configuration status="warn" monitorinterval="15"> >>>> > <Appenders> >>>> > <Console name="Console" target="SYSTEM_OUT"> >>>> > <PatternLayout pattern="%d{ISO8601} [%t] %-5level %logger{36} - >>>> > %L - %msg%n"/> >>>> > </Console> >>>> > <RollingFile name="RollingLogFile" fileName="logs/app.log" >>>> > filePattern="logs/app-%i.log" > >>>> > <PatternLayout> >>>> > <pattern>%d{ISO8601}_%-5level_[%replace{%t}{stateofmyestate\.}{}]_%replace{%logger{36}}{stateofmyestate\.}{}_%L_%msg%n%ex</pattern> >>>> > </PatternLayout> >>>> > <Policies> >>>> > <SizeBasedTriggeringPolicy size="5 MB" /> >>>> > </Policies> >>>> > <DefaultRolloverStrategy max="5"/> >>>> > </RollingFile> >>>> > </Appenders> >>>> > <Loggers> >>>> > <Logger name = "appname.classname" level = "trace" >>>> > additivity="false"> >>>> > <AppenderRef ref="RollingLogFile"/> >>>> > <AppenderRef ref="Console"/> >>>> > </Logger> >>>> > <Root level="trace"> >>>> > <AppenderRef ref="Console"/> >>>> > </Root> >>>> > </Loggers> >>>> > </Configuration> >>>> > >>>> > I have a lot of log messages, many of which are logged as the >>>> > application is starting. When using Java 11 the logging is causing my >>>> > application to take at least 6 times longer to start than with Java 8. >>>> > With Java 8 it takes between 3 and 4 seconds. With Java 11 it takes 25 >>>> > seconds. I have some other functionality that also does a lot of logging >>>> > when the log level is set to trace, and in that case the performance >>>> > goes from seconds in Java 8 to several minutes in Java 11. >>>> > >>>> > I've tried various things to troubleshoot, and it appears to be >>>> > something related to Console logging that is causing the performance >>>> > issue. If I remove the Console Appenders from my configuration and leave >>>> > only the RollingFile Appenders, the problem goes away. If I do the >>>> > opposite and remove the RollingFile Appenders and leave the Console >>>> > Appenders, I see a tiny improvement in the performance, but it's still >>>> > way worse than in Java 8. So far I'm testing by running the application >>>> > through NetBeans. I haven't tried starting the application from a >>>> > Windows Command window yet. Running into some other issues doing that. >>>> > >>>> > Can anyone help me figure out if this is a log4j issue, or if there is >>>> > something I can change in how I'm using log4j with Java 11, so I can >>>> > resolve this issue? >>>> > >>>> > Thank you. >>>> > >>>> > Lisa Ruby >>>> > >>>> > >>>> > >>>> > >>>> > --------------------------------------------------------------------- >>>> > To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org >>>> > <mailto:log4j-user-unsubscr...@logging.apache.org> >>>> > For additional commands, e-mail: log4j-user-h...@logging.apache.org >>>> > <mailto:log4j-user-h...@logging.apache.org> >>>> > >>>> > >>>> >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org >>>> <mailto:log4j-user-unsubscr...@logging.apache.org> >>>> For additional commands, e-mail: log4j-user-h...@logging.apache.org >>>> <mailto:log4j-user-h...@logging.apache.org> >>>> >>> >> >