情况
我的应用程序似乎时不时地卡住。我得到的唯一指示是我的浏览器会说“等待本地主机...”。如果我重新启动浏览器并访问我的应用程序,它会继续等待。到目前为止,唯一的解决方案是关闭 Tomcat,然后再将其重新打开。然后问题就消失了。我非常有信心这是一个已经接管的服务器端进程,没有任何客户端。
问题
与其只分析我的代码,不如在任何给定时间实际检查 Tomcat 正在做什么或正在做什么,有点像 “Tomcat 任务管理器”
。我怀疑 JVM 在后台运行的某些进程是罪魁祸首,但我不确定如何分析它。
问题
在没有网络请求时查看 Tomcat 正在做什么的最佳方式是什么?
知道我应该将哪些后台进程或线程视为可能的罪魁祸首吗?
问题的可能原因:
当我开始跨多个页面使用单例时,这个问题就开始了。在我 promise 将其作为原因之前,我想查明实际发生卡住的位置。
最佳答案
以下是我过去使用过的 4 种诊断方法。每一个都有点复杂,您可能会或不会在您的环境中使用它。
将应用程序连接到 VisualVM 并查看线程的状态(您可能遇到死锁)。
另一种类似的替代方法是从 JVM 获取线程转储,您可以查看是否有多个线程在等待锁)。这page说明如何进行线程转储。
如果您仍然无法使用这些工具找到它,还有另一种选择,您可能需要使用诸如 YourKit 之类的分析器,看看您的应用正在做什么。
最后一个是在remote debug mode中运行应用程序每当您的应用停止正常工作时,您都可以从您的 IDE 连接以查看它挂起的确切位置。
关于jakarta-ee - 调试卡住的 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18052388/