Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调试挂起的java线程?_Java_Multithreading_Debugging_Tomcat - Fatal编程技术网

如何调试挂起的java线程?

如何调试挂起的java线程?,java,multithreading,debugging,tomcat,Java,Multithreading,Debugging,Tomcat,我有以下问题: 我在Tomcat(Linux)中部署了一个web应用程序,在关闭Tomcat之后,如果我执行ps-ef操作,我仍然可以看到java进程正在运行。 我相信这是由于一些挂线造成的,但我不知道如何追踪这条线。 如何调试此问题 您可以如下所述生成4-5个线程转储,然后使用以下工具对其进行分析 您要检查的是,当发生卡住的线程或长时间运行的事务时,所有线程转储将显示某个线程id在java堆栈跟踪中的同一行。更简单地说,事务跨越多个线程转储,因此需要更多的调查 现在,当您运行这些时,它将以红色

我有以下问题:
我在Tomcat(Linux)中部署了一个web应用程序,在关闭Tomcat之后,如果我执行
ps-ef
操作,我仍然可以看到
java
进程正在运行。
我相信这是由于一些挂线造成的,但我不知道如何追踪这条线。

如何调试此问题

您可以如下所述生成4-5个线程转储,然后使用以下工具对其进行分析

您要检查的是,当发生卡住的线程或长时间运行的事务时,所有线程转储将显示某个线程id在java堆栈跟踪中的同一行。更简单地说,事务跨越多个线程转储,因此需要更多的调查

现在,当您运行这些时,它将以红色突出显示这些,以便您可以快速单击它并进入显示问题的行

请看一个例子。请看该链接中的武士输出图像。绿色细胞很好。红细胞和灰细胞需要观察

生成线程转储:

(Linux)

如果JVM在控制台中运行,只需按
Ctrl-\
。 如果JVM在后台运行,则向其发送退出信号:

kill-QUIT进程\u id

process_id是正在运行的Java进程的进程号。线程转储也将被发送到标准输出重定向到的任何地方。 您通常可以使用以下命令获取所有正在运行的Java进程的进程号:


ps-axf | grep-java

您说您的java进程仍然存在,对吗? 进程只要有附加的线程就存在,对吗? 如果是这样,我会采取以下方法: -在MBean服务器连接并由JVM内部管理的情况下运行该进程

然后在发送退出信号并获取线程转储(应该有一个JMX)后连接到进程。查看哪些线程看起来可疑


我想你也可以使用JVisualVM进行线程转储…

这不是Jim要求的,他要求的是调试方法。@aviad:我做了一个
kill-3
并将javacore加载到Samurai。没有可视表,只有一个日志报告。我如何从该报告跟踪线程?你可以在Samurai中打开转储日志(使用文件->打开菜单)在堆栈跟踪中找到属于您的代码的有问题的行,然后尝试找出哪里出了问题/转到IDE,用断点锁定它并调试您的应用程序。@aviad:我已加载该文件,但我没有看到切换到IDE显示的选项。它像文本文件一样打开。我认为Samurai是一个分析工具-您必须调试它我不知道如何使用你推荐的方法这看起来更容易,但aviad已经建议过了:):至于JVisualVM方法,这里有一个教程。基本上,jvisualvm只是一个可执行文件,可以在$JAVA_HOME/bin文件夹中找到。。。运行它,连接到你的应用程序,看看你能用它做什么。非常强大的东西,真的:)如何使用
JVisualVM
远程连接到linux安装中的tomcat?如何使用
JVisualVM
加载javacore.pid.txt?