Web applications 为什么是「」正在等待锁定(java.io.PrintStream)";线程被阻塞了?

Web applications 为什么是「」正在等待锁定(java.io.PrintStream)";线程被阻塞了?,web-applications,java-8,thread-dump,filehandler,wildfly-12,Web Applications,Java 8,Thread Dump,Filehandler,Wildfly 12,我们正在使用JDK 8在wildFly 12服务器上运行一个web应用程序。无论何时通过wildFly文件处理程序下载任何文件,我们都面临着java.exe CPU的高利用率。在线程转储中,有很多java.io.PrintStream类被阻塞。堆栈跟踪如下所示: Thread Dump: "pool-13-thread-21" #343 prio=5 os_prio=0 tid=0x00000000200e8000 nid=0x115c waiting for monitor entry [0

我们正在使用JDK 8在wildFly 12服务器上运行一个web应用程序。无论何时通过wildFly文件处理程序下载任何文件,我们都面临着java.exe CPU的高利用率。在线程转储中,有很多java.io.PrintStream类被阻塞。堆栈跟踪如下所示:

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>
线程转储:
“pool-13-thread-21”#343优先级=5 os_优先级=0 tid=0x00000000200e8000 nid=0x115c等待监视器条目[0x00000000424ee000]
java.lang.Thread.State:阻塞(在对象监视器上)
在java.io.PrintStream.println(PrintStream.java:805)
-等待锁定(java.io.PrintStream)
位于org.jboss.stdio.StdioContext$DelegatingPrintStream.println(StdioContext.java:474)
在com.rabbit.Consumer$1.handleDelivery上(Consumer.java:89)
位于com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
位于com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
运行(Thread.java:748)
“线程-161”#261优先级=5操作系统优先级=0 tid=0x000000002d954800 nid=0x11e4等待监视器条目[0x0000000038eff000]
java.lang.Thread.State:阻塞(在对象监视器上)
位于org.jboss.logmanager.handlers.WriterHandler.doPublish(WriterHandler.java:56)
-等待锁定(java.lang.Object)
位于org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:77)
位于org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:314)
位于org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:322)
位于org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:322)
位于org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:322)
位于org.jboss.logmanager.Logger.logRaw(Logger.java:850)
位于org.jboss.logmanager.Logger.logp(Logger.java:657)
位于org.apache.commons.logging.impl.Jdk14Logger.log(Jdk14Logger.java:87)
位于org.apache.commons.logging.impl.Jdk14Logger.info(Jdk14Logger.java:176)
位于com.processengine.jobprocessor.PingUpdateThread.run(PingUpdateThread.java:84)
Standalone.xml处理程序代码:
我想知道为什么PrintStream类被阻塞,为什么下载过程会增加CPU利用率


提前感谢

线程被阻塞,而不是类。当大量线程此时被阻止时,许多线程正在尝试打印某些内容,但无法同时打印。您是否正在使用
System.out.println
?我的假设是肯定的,这看起来可能是造成阻塞的原因。是的,詹姆斯。我们已经删除了System.out.println声明中关于问题得到解决的帖子。谢谢,詹姆斯和霍尔格。