2015-11-26 33 views
0

我面临一个奇怪的情况。如果你能分享你的意见,我会很高兴。Java进程挂起,不能线程转储

我们有在Java 1.6.085上运行的解决方案,有时Java进程在生产中变得越来越多。该解决方案在Linux服务器上运行。
我调查了GC日志,没有完整的GC。暂停时间也看起来合理。 然后我们尝试在发生情况时采用线程转储,但是kill -3,./jstack或./jstack -F不起作用。没有线程转储可以采取。这可能是什么原因?任何关于调查问题的想法?

BR -emre

+1

jstack/kill需要停止世界暂停。在某些情况下,这是不可能的http://stackoverflow.com/questions/33917951/how-to-force-reproduce-fullgc-in-jvm您可以请提供系统输出以下设置-XX:+ PrintGCApplicationStoppedTime -XX:+ PrintSafepointStatistics -XX:PrintSafepointStatisticsCount = 1? – Ivan

+0

@Ivan,我认为-F不需要STW暂停,它捕获正在运行的线程堆栈。 – the8472

+1

1.6是古老的,为什么不先更新,看看问题是否消失? – the8472

回答

0

我们使用JConsole与topthreads plugin来分析这样的情况。该插件使用JMX检查线程运行时间并显示自跟踪过程开始以来的CPU使用情况以及每个线程的当前堆栈跟踪。

要从本地机器连接我们的服务器,我们在腻子中使用隧道,即我们首先通过腻子连接到服务器,然后将jConsole连接到隧道到服务器的本地端口。

+0

Thx for repIy,我下载了新版本并尝试使用它,但是没有看到新标签。你有什么主意吗 ? ./jconsole -pluginpath /home/mmsuper/topthreads.jar – emrenak

+0

@emrenak hmm,在Windows客户端上使用jconsole,我们的jconsole.bat(它向类路径添加了一些JBoss特定的库)包含这一行:''%JAVA_HOME% \ bin \ jconsole.exe“-J”-Djava.class.path =%CLASSPATH%“-pluginpath C:\ whatever \ topthreads-1.1.jar' - 所以除非路径错误,否则应该起作用。你有没有检查权限,名称等? – Thomas

1

经过一段时间后,我们了解到,由于pstack和qdb命令会出现问题,这些命令会在java进程上执行以用于操作目的。不知何故,pstack和qdb暂停java进程。因此,我们无法采取线程或堆转储