Uploaded image for project: 'WildFly Core'
  1. WildFly Core
  2. WFCORE-40

Deadlock while logging

    XMLWordPrintable

Details

    • Bug
    • Resolution: Obsolete
    • Critical
    • None
    • None
    • Logging
    • None
    • Hide

      Disable most of the log debug / info / warn / System.out in our application code reduces the possibility to hit this deadlock. Unfortunately, for monitoring purposes we can not disable the whole logging at all - and even having only a minimal set of log messages, we hit the bug at least once every few days.

      Show
      Disable most of the log debug / info / warn / System.out in our application code reduces the possibility to hit this deadlock. Unfortunately, for monitoring purposes we can not disable the whole logging at all - and even having only a minimal set of log messages, we hit the bug at least once every few days.

    Description

      We hit really often a deadlock? in org.jboss.stdio.StdioContext$DelegatingPrintStream.println(StdioContext.java:474)

      Even if the "StdioContext" belongs to Jboss-Logging, the problem occurs in our production wildfly installation twice to 4 times a day - all threads are deadlocking while trying to log.debug, log.error, or (sometimes) System.out.println from our application code, and wildfly does not respond anymore...

      The partial stacktrace always is similar to this one:

       "default task-64" prio=10 tid=0x4c539c00 nid=0x5ef9 waiting for monitor entry [0x495e0000]
         java.lang.Thread.State: BLOCKED (on object monitor)
              at java.io.PrintStream.println(PrintStream.java:806)
              - waiting to lock <0x5ee0adf8> (a java.io.PrintStream)
              at org.jboss.stdio.StdioContext$DelegatingPrintStream.println(StdioContext.java:474)
              at jsp.communications.statuschange.selectStatus_jsp._jspService(selectStatus_jsp.java:413)
              at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:69)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
              at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
              at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:82)
      

      While investigating the StdioContext - class, i really wondered whether the used "locking/checking by using a threadlocal" could have worked in a multi-threaded environment (it should have the very same problems as every "double checking" algorithm without proper synchronization).

      If all threads are hanging in this particular lock, only a full wildfly-restart recovers in our case.

      My preferred solution would be a rework of the used org.jboss.stdio. classes, as the used idioms of ThreadLocals for reentrant-checks are at least highly unusual?

      Attachments

        Activity

          People

            jperkins-rhn James Perkins
            s.schueffler@softgarden.de Stefan Schüffler (Inactive)
            Votes:
            1 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: