0

We are running a web application in wildFly 12 server with JDK 8. Whenever downloading any files through wildFly file handlers we are facing the java.exe CPU high utilization. In thread dump, there are a lot of java.io.PrintStream classes got blocked. The stack traces are below:

Thread Dump:

"pool-13-thread-21" #343 prio=5 os_prio=0 tid=0x00000000200e8000 nid=0x115c waiting for monitor entry [0x00000000424ee000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at java.io.PrintStream.println(PrintStream.java:805)
    - waiting to lock <0x00000006e1236a50> (a java.io.PrintStream)
    at org.jboss.stdio.StdioContext$DelegatingPrintStream.println(StdioContext.java:474)
    at com.rabbit.Consumer$1.handleDelivery(Consumer.java:89)
    at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
    at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


"Thread-161" #261 prio=5 os_prio=0 tid=0x000000002d954800 nid=0x11e4 waiting for monitor entry [0x0000000038eff000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at org.jboss.logmanager.handlers.WriterHandler.doPublish(WriterHandler.java:56)
    - waiting to lock <0x00000006e121a4b0> (a java.lang.Object)
    at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:77)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:314)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:322)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:322)
    at org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:322)
    at org.jboss.logmanager.Logger.logRaw(Logger.java:850)
    at org.jboss.logmanager.Logger.logp(Logger.java:657)
    at org.apache.commons.logging.impl.Jdk14Logger.log(Jdk14Logger.java:87)
    at org.apache.commons.logging.impl.Jdk14Logger.info(Jdk14Logger.java:176)
    at com.processengine.jobprocessor.PingUpdateThread.run(PingUpdateThread.java:84)

Standalone.xml handler code:

            <server name="default-server">
                <http-listener name="default" socket-binding="http" redirect-socket="https" max-post-size="2147483648" max-parameters="10000" enable-http2="true"/>                
                <host name="default-host" alias="localhost">
                     <location name="/Management" handler="Mgmt"/>
                    <http-invoker security-realm="ApplicationRealm"/>
                </host>
            </server>

            <handlers>
                <file name="Mgmt" path="..\..\Management\ExternalWar\Management.war"/>
            </handlers>

I want to know why the PrintStream class got BLOCKED and why the download process increasing the CPU utilization.

Thanks in advance

  • The *thread* is blocked, not the class. When a lot of threads are blocked at this point, a lot of threads are trying to print something, but they can’t print at the same time. – Holger Nov 29 '19 at 11:22
  • Is you're consumer using `System.out.println`? My assumption is yes which looks like it may be causing the block. – James R. Perkins Dec 02 '19 at 23:45
  • Yes James. We have removed that System.out.println statement post that the issue got resolved. Thanks, James and Holger. – mathiyarasu.T Arasu Dec 05 '19 at 06:24

0 Answers0