jakarta-ee - 调试卡住的 Web 应用程序

标签 jakarta-ee tomcat

情况

我的应用程序似乎时不时地卡住。我得到的唯一指示是我的浏览器会说“等待本地主机...”。如果我重新启动浏览器并访问我的应用程序,它会继续等待。到目前为止,唯一的解决方案是关闭 Tomcat,然后再将其重新打开。然后问题就消失了。我非常有信心这是一个已经接管的服务器端进程,没有任何客户端。

问题

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

问题

  1. 在没有网络请求时查看 Tomcat 正在做什么的最佳方式是什么?

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

问题的可能原因:

当我开始跨多个页面使用单例时,这个问题就开始了。在我 promise 将其作为原因之前,我想查明实际发生卡住的位置。

最佳答案

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

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

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

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

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

关于jakarta-ee - 调试卡住的 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18052388/

相关文章:

java - 为 webapp 存储临时数据的最佳实践

eclipse - 将 Maven Web 应用程序运行到 Tomcat

html - 无法在 Web 应用程序中加载静态内容(图像/JS)

jakarta-ee - SEAM 中的基本验证器

java - 在 JAX-RS 中使用来自应用程序服务器的 EJB

java - 通过执行器和可运行访问时,Tomcat 上下文为空

java - Java EE 6 应用程序中的 SocketException

jakarta-ee - 调用 POJO 的 EJB 事务

angularjs - 一个项目中的 Spring Rest 和 Angular JS

java - 我可以将相同java包的类文件拆分为Tomcat上的jar文件和classes文件夹吗?