0

情况

每隔一段时间,我的申请似乎就冻结了。我得到的唯一迹象是我的浏览器会说“等待本地主机......”。如果我重新启动浏览器并访问我的应用程序,它会继续等待。到目前为止,唯一的解决方案是关闭 Tomcat,然后重新打开它。然后问题就消失了。我非常有信心这是一个已经接管的服务器端进程,而不是客户端。

问题

与其只分析我的代码,不如实际检查 Tomcat 在任何给定时间正在做什么或工作,有点像"Tomcat Task manager". 我怀疑在 JVM 后台运行的某些进程是罪魁祸首,但我不确定如何分析它。

问题

  1. 在没有发出 Web 请求时查看 Tomcat 正在做什么的最佳方法是什么?

  2. 知道我应该将哪些后台进程或线程视为可能的罪魁祸首吗?

问题的可能原因:

当我开始在多个页面中使用单例时,这个问题就开始了。在我承诺将其作为原因之前,我想追踪冻结实际发生的位置。

4

1 回答 1

2

以下是我过去使用过的 4 种诊断方法。每一个都有点复杂,你可能会或不能在你的环境中使用它。

  1. 将应用程序连接到 VisualVM 并查看线程的状态(您可能有死锁)。

  2. 另一个类似的替代方法是从 JVM 获取线程转储,您可以查看是否有多个线程在等待锁定)。本页说明如何进行线程转储。

  3. 如果您仍然无法使用这些工具找到另一个选项,您可能需要使用诸如 YourKit 之类的分析器并查看您的应用程序在做什么。

  4. 最后一个是在远程调试模式下运行应用程序,当您的应用程序停止正常工作时,您可以从 IDE 连接以查看它挂起的确切位置。

于 2013-08-05T07:24:31.730 回答