Uploaded image for project: 'odlparent'
  1. odlparent
  2. ODLPARENT-176

Reduce GC pressure and lock contention by ditching the PaxOsgi log appender

XMLWordPrintable

    • Icon: Improvement Improvement
    • Resolution: Won't Do
    • Icon: Medium Medium
    • None
    • 3.1.4
    • None
    • None

      I'm looking at a Java Flight Recording obtained from (internal) scale lab testing, based on Oxygen SR3 code, and thought it was curious / interesting that the following code paths appears very frequently as a big "TLAB allocation".

      What's interesting is that in a real world scale test this is the only log that shows up as a big "TLAB allocation" - so it seems to me that a closer look at this code is worth it. Perhaps it's even a simple case of reducing an over INFO to a DEBUG log.

      StackTraceElement java.lang.Throwable.getStackTraceElement(int)	3875
      StackTraceElement[] java.lang.Throwable.getOurStackTrace()	3875
      StackTraceElement[] java.lang.Throwable.getStackTrace()	3875
      StackTraceElement org.apache.logging.log4j.core.impl.Log4jLogEvent.calcLocation(String)	3771
      StackTraceElement org.apache.logging.log4j.core.impl.MutableLogEvent.getSource()	3771
      PaxLocationInfo org.ops4j.pax.logging.log4j2.internal.PaxLoggingEventImpl.getLocationInformation()	3771
      void org.ops4j.pax.logging.log4j2.internal.PaxAppenderProxy.doAppend(PaxLoggingEvent)	3771
      void org.ops4j.pax.logging.log4j2.appender.PaxOsgiAppender.append(LogEvent)	3771
      void org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(LogEvent)	3771
      void org.apache.logging.log4j.core.config.AppenderControl.callAppender0(LogEvent)	3771
      void org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(LogEvent)	3771
      void org.apache.logging.log4j.core.config.AppenderControl.callAppender(LogEvent)	3771
      void org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LogEvent)	3771
      void org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LogEvent)	3771
      void org.apache.logging.log4j.core.config.LoggerConfig.log(LogEvent)	3771
      void org.apache.logging.log4j.core.config.LoggerConfig.log(String, String, Marker, Level, Message, Throwable)	3771
      void org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(Supplier, String, String, Marker, Level, Message, Throwable)	3771
      void org.apache.logging.log4j.core.Logger.logMessage(String, Level, Marker, Message, Throwable)	3771
      void org.ops4j.pax.logging.log4j2.internal.PaxLoggerImpl.doLog0(Level, int, String, String, Throwable)	3771
      void org.ops4j.pax.logging.log4j2.internal.PaxLoggerImpl.doLog(Level, int, String, String, Throwable)	3771
      void org.ops4j.pax.logging.log4j2.internal.PaxLoggerImpl.inform(String, Throwable)	3646
      void org.ops4j.pax.logging.internal.TrackingLogger.inform(String, Throwable)	3646
      void org.ops4j.pax.logging.slf4j.Slf4jLogger.info(String, Object)	3542
      List org.opendaylight.netvirt.vpnmanager.VpnUtil.getRts(VpnInstanceOpDataEntry, VpnTarget$VrfRTType)	3466
      boolean org.opendaylight.netvirt.vpnmanager.VpnUtil.lambda$getVpnsImportingMyRoute$10(VpnInstanceOpDataEntry, VpnInstanceOpDataEntry)	3466
      boolean org.opendaylight.netvirt.vpnmanager.VpnUtil$$Lambda$1872.1909057161.test(Object)	3466
      void java.util.stream.ReferencePipeline$2$1.accept(Object)	3466
      void java.util.stream.ReferencePipeline$2$1.accept(Object)	3466
      void java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Consumer)	3466
      void java.util.stream.AbstractPipeline.copyInto(Sink, Spliterator)	3466
      Sink java.util.stream.AbstractPipeline.wrapAndCopyInto(Sink, Spliterator)	3466
      Object java.util.stream.ReduceOps$ReduceOp.evaluateSequential(PipelineHelper, Spliterator)	3466
      Object java.util.stream.AbstractPipeline.evaluate(TerminalOp)	3466
      Object java.util.stream.ReferencePipeline.collect(Collector)	3466
      List org.opendaylight.netvirt.vpnmanager.VpnUtil.getVpnsImportingMyRoute(DataBroker, String)	3466
      void org.opendaylight.netvirt.vpnmanager.populator.impl.L3vpnOverMplsGrePopulator.populateFib(L3vpnInput, WriteTransaction)	3466
      void org.opendaylight.netvirt.vpnmanager.VpnInterfaceManager.processVpnInterfaceAdjacencies(BigInteger, int, String, String, String, long, WriteTransaction, WriteTransaction, WriteTransaction, Interface)	3466
      void org.opendaylight.netvirt.vpnmanager.VpnInterfaceManager.processVpnInterfaceUp(BigInteger, VpnInterface, String, int, boolean, WriteTransaction, WriteTransaction, WriteTransaction, Interface, String)	3466
      void org.opendaylight.netvirt.vpnmanager.InterfaceStateChangeListener.lambda$null$0(Interface, WriteTransaction, WriteTransaction, WriteTransaction)	3461
      void org.opendaylight.netvirt.vpnmanager.InterfaceStateChangeListener$$Lambda$1690.1216649502.accept(Object)	3461
      ListenableFuture org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl.callWithNewWriteOnlyTransactionAndSubmit(CheckedConsumer)	3461
      void org.opendaylight.netvirt.vpnmanager.InterfaceStateChangeListener.lambda$null$1(Interface, WriteTransaction, List, WriteTransaction)	3461
      void org.opendaylight.netvirt.vpnmanager.InterfaceStateChangeListener$$Lambda$1673.843807247.accept(Object)	3461
      ListenableFuture org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl.callWithNewWriteOnlyTransactionAndSubmit(CheckedConsumer)	3461
      void org.opendaylight.netvirt.vpnmanager.InterfaceStateChangeListener.lambda$null$2(Interface, List, WriteTransaction)	3461
      void org.opendaylight.netvirt.vpnmanager.InterfaceStateChangeListener$$Lambda$1660.1073420380.accept(Object)	3461
      ListenableFuture org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl.callWithNewWriteOnlyTransactionAndSubmit(CheckedConsumer)	3461
      List org.opendaylight.netvirt.vpnmanager.InterfaceStateChangeListener.lambda$add$3(Interface)	3461
      Object org.opendaylight.netvirt.vpnmanager.InterfaceStateChangeListener$$Lambda$1654.1406813511.call()	3461
      void org.opendaylight.infrautils.jobcoordinator.internal.JobCoordinatorImpl$MainTask.runWithUncheckedExceptionLogging()	3461
      void org.opendaylight.infrautils.utils.concurrent.LoggingUncaughtThreadDeathContextRunnable.run()	3461
      boolean java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec()	3461
      int java.util.concurrent.ForkJoinTask.doExec()	3461
      void java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinTask)	3461
      void java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool$WorkQueue)	3461
      void java.util.concurrent.ForkJoinWorkerThread.run()	3461

            Unassigned Unassigned
            vorburger Michael Vorburger
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: