0

我们的 java 应用程序(ear)部署在 J Boss+Linux 中,我们正在使用 mod 集群,总共有 8 个 JVM 或 j Boss 实例。

我们可以看到每天一两个 JVM 的 CPU 利用率都达到了 100%,并且应用程序非常缓慢。

我试图通过使用 j 堆栈和 kill Linux 命令来识别导致线程的线程转储。但不幸的是,如果这些命令的 CPU 利用率达到 60% 以上,JVM 没有响应。

有没有最简单的方法来识别导致问题增加 CPU 利用率的线程/方法/类名称?

谁能尽快提供解决方案?

4

2 回答 2

0

正如您所写,JVM 没有响应,因此无法获取有关已执行类/方法的详细信息。因此,“有没有最简单的方法”的答案将是“否”。;-)

但也许它可以帮助您或其他任何人(2.5 年前提出的问题)在这种情况下我会做什么:

  1. 识别 linux 线程(我为此使用了小型 linux 工具“threadcpu”)。
  2. 对找到的 PID 进行 strace - 可能使用更长的字符串(“-s 1024”)。

这可以给你一个提示当前正在执行哪个类/方法。如果您看到例如数百个 SQL 查询仅在一个类中使用,那么这会对您有很大帮助。

“threadcpu”可以从这里下载:tuxad.com

于 2018-10-15T20:01:21.283 回答
0

要从挂起的进程使用中获取堆栈jstack -F <PID>,请参阅oracle 文档

其他解决方案可以在这里找到

于 2016-03-15T20:04:17.960 回答