【发布时间】:2015-09-20 11:40:59
【问题描述】:
在使用 CPU 的高负载应用程序上执行线程转储,我看到很多线程处于这种状态:
“ajp-executor-threads - XXXXXX”prio=10 tid=0x00002b04b8b33801 nid=0x5327 可运行 [0x0000000000000000] java.lang.Thread.State: 可运行
对我来说真正奇怪的是根本没有堆栈跟踪,而且 ajp-thread 的总数高于配置的 max-threads(下)
应用程序正在运行:
- JBoss 7
- Java 7u75
- 红帽 5.11
- 在 VMWare Enterprise / vSphere 5.5 上运行
执行器的配置是:
<subsystem xmlns="urn:jboss:domain:threads:1.1">
<bounded-queue-thread-pool name="ajp-executor">
<core-threads count="32"/>
<queue-length count="1"/>
<max-threads count="300"/>
<keepalive-time time="5" unit="seconds"/>
</bounded-queue-thread-pool>
</subsystem>
请注意,此主机上的负载非常高:
CPU 达到 70%
负载为 4(== vCPU 数量)
请注意,这些线程不是空闲线程,因为空闲线程具有此堆栈跟踪:
"Reference Handler" daemon prio=5 tid=0x00007f92cb00e800 nid=0x3703 in Object.wait() [0x000000012057e000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007aaa84470> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:503)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
- locked <0x00000007aaa84470> (a java.lang.ref.Reference$Lock)
【问题讨论】:
标签: java multithreading performance jboss7.x virtual-machine