【发布时间】:2010-04-06 04:01:17
【问题描述】:
我们有两台以 Apache 为前端的 Tomcat 6.0.20 服务器,两者之间使用 AJP 进行通信。 Tomcat 反过来使用 JBoss 集群上的 Web 服务。
今天早上,其中一台 Tomcat 机器在我们机器的 8 个内核中的 6 个上使用了 100% 的 CPU。我们使用 JConsole 进行了堆转储,然后尝试连接 JVisualVM 以获取配置文件以查看占用所有 CPU 的原因,但这导致 Tomcat 崩溃。至少我们有堆转储!
我已将堆转储加载到 Eclipse MAT 中,在那里我发现我们有 565 个 java.lang.Thread 实例。其中一些显然是完全合法的,但绝大多数被命名为“ajp-6009-XXX”,其中 XXX 是一个数字。
我非常了解 Eclipse MAT 的使用方法,但无法找到解释。如果有人对 Tomcat 为何会这样做有一些指示,或者对找出为什么使用 Eclipse MAT 有一些提示,那将不胜感激!
【问题讨论】:
-
堆转储可能包含已死线程的遗骸,因此在崩溃时并非所有 565 个线程都处于活动状态。