繁体   English   中英

是否有Linux命令来打印正在运行的Java进程的当前堆栈

[英]Is there a Linux command to print the current stack of a running Java process

情况:

我有一个在CentOS6中运行的具有多个线程的Java1.7进程。 该进程当前停止 (即,停留在某种循环或等待功能中)。 由于程序的复杂性,很难在Eclipse中进行例行调试(在下面的背景技术部分中有更多说明)。 因此,我想通过跟踪当前正在运行的堆栈来调试代码。

题:

是否有Linux命令可以让我打印堆栈以标识当前正在运行的线程/方法,以便我可以找到导致停止的方法?

背景:

无法在Eclipse中进行调试的原因:

  1. 它是一个MapReduce程序,通常在多台计算机上运行。
  2. 即使我在一台计算机上使用运行,它仍然涉及多个线程同时运行。
  3. 最重要的是,“停止错误”是随机发生的(即无法复制)。 因此,我最好的办法是确定导致该错误的当前运行方法。

PS:我的方法可能是完全错误的,所以请随时纠正我,并向正确的方向指出。

谢谢你的帮助。

您可以使用JStack来获取当前的线程转储。 它应该为您提供当前正在运行的线程及其堆栈跟踪。

它甚至可以为您做更多-如果存在任何死锁,它将告诉您有关死锁的信息。

除此之外,您还可以使用JVisualVM实时监视您的应用程序(您可以在那里实时检查线程并从中进行线程转储)。

RedHat

以下是在Unix上生成Java线程转储的方法:

1)记录Java进程的进程ID号(例如,使用top,ps -axw上的grep等),并使用kill -QUIT或kill -3命令向该进程发送QUIT信号。 例如:

杀死-3 JAVA_PID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM