我们正在使用 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>
我想知道为什么PrintStream类被 BLOCKED 以及为什么下载过程会增加 CPU 利用率。
提前致谢