Java 如何检查JVM无法终止的原因

Java 如何检查JVM无法终止的原因,java,jvm,daemon,shutdown,Java,Jvm,Daemon,Shutdown,我有一个程序已经到达spring引导运行方法的末尾,但它仍然不会终止。以下是在Eclipse调试中看到的正在运行的线程列表: 以下是暂停线程后可以看到的内容: 这是线程转储 我的程序从正确关闭的消息流中读取数据,并在程序正常终止时使用H2 db,我相信它会关闭。我无法理解是什么阻止JVM关闭,以及如何处理这种情况,因为我看到了正在运行的线程列表。看起来“Catalina-utility-1”和“container-0”正在忙着做一些事情。你能暂停这些线程看看发生了什么吗?他们可能让你的虚拟

我有一个程序已经到达spring引导运行方法的末尾,但它仍然不会终止。以下是在Eclipse调试中看到的正在运行的线程列表:

以下是暂停线程后可以看到的内容:

这是线程转储


我的程序从正确关闭的消息流中读取数据,并在程序正常终止时使用H2 db,我相信它会关闭。我无法理解是什么阻止JVM关闭,以及如何处理这种情况,因为我看到了正在运行的线程列表。

看起来“Catalina-utility-1”和“container-0”正在忙着做一些事情。你能暂停这些线程看看发生了什么吗?他们可能让你的虚拟机活着;DestroyJavaVM线程将能够毫无遗憾地强制杀死守护进程线程。@NotaJD更新的问题womp我说错了。看起来DestroyJavaVM负责加入所有非守护进程线程,而VM本身负责守护进程。撇开这一点不谈:您在容器配置或DispatcherServlet配置方面做了什么奇怪的事情吗?我还没有涉及容器配置或DispatcherServlet配置。不过,我有兴趣查看。看起来“Catalina-utility-1”和“container-0”正在忙着做一些事情。你能暂停这些线程看看发生了什么吗?他们可能让你的虚拟机活着;DestroyJavaVM线程将能够毫无遗憾地强制杀死守护进程线程。@NotaJD更新的问题womp我说错了。看起来DestroyJavaVM负责加入所有非守护进程线程,而VM本身负责守护进程。撇开这一点不谈:您在容器配置或DispatcherServlet配置方面做了什么奇怪的事情吗?我还没有涉及容器配置或DispatcherServlet配置。不过我有兴趣去看看。