生产服务器中的Tomcat(8.0.14-1 + deb8u1)突然占用了所有CPU,可以做些什么来诊断原因?我知道分析器可能派上用场,但不是在生产环境中,任何想法?
其他信息: "top" command execution / lsb_release
答案 0 :(得分:1)
@Gonzalo我已经看到你提供了几乎所有必要的信息,但我会从“开头”写下我的答案,所以对于偶然发现它的经验不足的用户来说,这可能会有所帮助。
你应该进行一次线程转储。你可以通过以下任何一种方式做到这一点:
查看top
或htop
命令输出。
top
按“shift + h”以显示主题(您也可以使用top -p PID
开头,以过滤掉不相关的流程)打开线程转储并查找十六进制线程。这是消耗CPU的线程
PS:你的线程转储看起来很奇怪,它错过了线程ID。线程堆栈应该像:
"Finalizer" daemon prio=8 tid=0x02b3d000 nid=0x898 in Object.wait() [0x02d0f000]
...stack traces here...
其中nid
是您从top / htop找到的线程ID十六进制。
尝试使用kill -3
答案 1 :(得分:0)
我们在几台服务器上遇到了同样的问题。问题也出现在没有Web应用程序的tomcat服务器上,只是提供静态页面。 cpu使用量突然旋转到200%并且永远不会下降
此问题在我们最近升级到8.0.14和8_u_121
之前从未出现过设置如下:
出现问题时,症状如下:
2017年1月30日10:15:38.479 INFO [http-nio-8080-exec-16] org.apache.coyote.http11.AbstractHttp11Processor.process解析错误 HTTP请求标头注意:进一步出现HTTP标头解析 错误将记录在DEBUG级别。 2017年1月30日10:15:40.022信息 [HTTP-NIO-8080-EXEC-17] org.apache.coyote.http11.AbstractHttp11Processor.process解析错误 HTTP请求标头注意:进一步出现HTTP标头解析 错误将记录在DEBUG级别。 2017年1月30日10:15:41.574 INFO [HTTP-NIO-8080-EXEC-18] org.apache.coyote.http11.AbstractHttp11Processor.process解析错误 HTTP请求标头
当我们升级到8.0.14时,我们在catalina.out中有类似的错误消息。这是因为此版本不再在url中接受未转义的{和}。我们通过更改客户端代码来修复它,将这些字符编码为%4B和%4D。当时没有cpu问题