Java Logback-可重入锁?

Java Logback-可重入锁?,java,slf4j,logback,Java,Slf4j,Logback,我们使用logback作为我们的日志impl。存在导致性能问题的可重入锁。你知道为什么会发生这种情况吗 这里有一个调用跟踪,我们看到锁的调用时间高达9.5秒。请查找附件中的完整跟踪 FrameworkServlet.service:unknown (160ms self time, 36258 ms total time) HttpServlet.service:621 (0ms self time, 36098 ms total time) DispatcherServlet.doServ

我们使用logback作为我们的日志impl。存在导致性能问题的可重入锁。你知道为什么会发生这种情况吗

这里有一个调用跟踪,我们看到锁的调用时间高达9.5秒。请查找附件中的完整跟踪

FrameworkServlet.service:unknown (160ms self time, 36258 ms total time)
HttpServlet.service:621 (0ms self time, 36098 ms total time)
  DispatcherServlet.doService:838 (0ms self time, 31639 ms total time)
   DispatcherServlet.doDispatch:910 (0ms self time, 30835 ms total time)
    Logger.log:788 (0ms self time, 9485 ms total time)
     Logger.filterAndLog_0_Or3Plus:396 (0ms self time, 9485 ms total time)
      Logger.buildLoggingEventAndAppend:442 (0ms self time, 9485 ms total time)
       Logger.callAppenders:260 (0ms self time, 9485 ms total time)
        Logger.appendLoopOnAppenders:273 (0ms self time, 9485 ms total time)
         AppenderAttachableImpl.appendLoopOnAppenders:48 (0ms self time, 9485 ms total time)
          UnsynchronizedAppenderBase.doAppend:88 (0ms self time, 9485 ms total time)
           OutputStreamAppender.append:103 (0ms self time, 9485 ms total time)
            OutputStreamAppender.subAppend:217 (0ms self time, 9485 ms total time)
             ReentrantLock.lock:290 (9485ms self time, 9485 ms total time)
附图:

看起来像是几个线程同时大量写入日志。将在锁定状态下写入日志文件。当一个线程非常缓慢地写入文件系统,而另一个线程正在等待1个线程时,可能会出现IO问题。那么解决方案是什么?我们应该在logback中使用异步附加器吗?如何避免这种情况?这并不是只发布日志记录层延迟。你是在使用某种套接字追加器吗?写入文件(此处为流)是一个瓶颈,所有日志线程都需要相互等待。日志记录本身(至少在同一输出中添加新条目)需要序列化,因为它会创建损坏的日志/混合日志。我们使用的是ConsoleAppender和FileAppender。所以我们必须使用不同的appender来序列化它吗?