Tomcat 没有响应,并且间歇性地抛出 504。但是 CPU 使用率并不高。我们怀疑这可能是由于我们收到大量请求导致 tomcat 没有响应。我们在 server.xml 中将 maxThreads 设置为 400,我们得到的唯一线索是日志中的以下错误。
为地址为 null 且端口为 8090 的连接器创建的最大线程数 (400)
我们使用 AWS 并检查了 ELB,当时只有 299 个请求。因此,当我们在错误中看到最大线程数时,我们感到困惑,为什么 ELB 显示的线程数会比这个少呢?
答案1
这种行为通常是由于高堆内存使用率和/或过多的垃圾收集引起的。
当 Tomcat 内存紧张时,它会开始响应缓慢并间歇性超时。情况通常会慢慢恶化,直到它变得没有响应。
在这种情况下,您可能会看到或看不到高 CPU 使用率。尝试分析内存使用情况(JMX 可能对此有帮助)、GC 日志,看看是否是导致这种情况的原因。
如果是这种情况,则可能是某个地方存在内存泄漏。因此,请进一步分析,找到并修复它,或者每次遇到此状态时都重新启动 Tomcat。