java - 确定 Tomcat 中数百个 AJP 线程的原因

标签 java tomcat6 ajp

我们有两台以 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 的提示,我们将不胜感激!

最佳答案

我想这不是一个直接的答案,但也许作为生产中的一种缓解方法,您可以根据 http://tomcat.apache.org/tomcat-6.0-doc/config/ajp.html 限制配置中 AJP 的 maxThreads 来限制损害。 ?

默认值为 200,这肯定是很多线程 - 但这可能无法解释上面的 565。显然,这有可能将问题推到别处,但也许您最好能够在那里调试问题,否则它会以不同的方式表现出来。是否有可能您的负载量很大?在导致您遇到的问题期间,Apache 的行为有什么值得注意的吗?

关于java - 确定 Tomcat 中数百个 AJP 线程的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2161129/

相关文章:

java - HttpServletRequest无法执行getParameter操作

java - “陷害”tomcat6 丢失 session

java - 存在多个 log4j.properties 时 log4j 的行为

jboss - postman 请求实体太大-413

apache - 对页面使用 ProxyPass,但对图像不使用

java - 如何关闭此 javadoc 警告 : @return tag has no arguments

java - Eclipse:无法创建 SWT 浏览器小部件

tomcat - iPlanet/Tomcat AJP 连接挂起

java - 在 Android Studio 中调用 MediaRecorder 会使应用程序崩溃

java - 不知从何而来的方法?