调试冻结的Web应用程序

时间:2013-08-05 07:10:13

标签: java-ee tomcat

场合

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

问题

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

问题

  1. 在没有提出网络请求的情况下,查看Tomcat正在做什么的最佳方式是什么?

  2. 知道我应该考虑哪些后台流程或线程作为可能的罪魁祸首?

  3. 可能的问题原因:

    一旦我开始在多个页面中使用单例,就会启动此问题。在我承诺之前,我想跟踪冻结实际发生的地方。

1 个答案:

答案 0 :(得分:2)

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

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

  2. 另一个类似的替代方法是从JVM获取线程转储,您可以看到是否有多个线程在等待锁定。这个page解释了如何进行线程转储。

  3. 如果您仍然无法使用这些工具找到它,还有另一种选择,您可能需要使用YourKit等分析器,看看您的应用正在做什么。

  4. 最后一个是在remote debug mode中运行应用程序,只要您的应用程序停止正常工作,您就可以从IDE连接以查看其挂起的确切位置。