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

标签 java linux debugging stack-trace

情况:

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

问题:

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

背景:

Eclipse无法调试的原因:

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

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

感谢您的帮助。

最佳答案

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

它甚至会为您做更多事情 - 如果出现任何死锁,它会告诉您。

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

关于java - 是否有 Linux 命令来打印正在运行的 Java 进程的当前堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25560415/

相关文章:

linux - bash:可能需要双 Ctrl-c 才能退出脚本?

Python 3 Windows 服务仅在 Debug模式下启动

html - 如何让我的社交图标在移动 View 中水平显示?

java - Bungeecord 玩家传输上的 Mongo 数据库配置文件同步

php - 我正在尝试在我的 VPS 上安装 wkhtmltopdf 但在执行时收到错误消息

linux - 应该使用哪个 shell 以获得 Linux/MacOS/UNIX 最佳兼容性?

java - 方法签名处的断点会减慢调试器的速度

java - 更改 Google Place Picker Appbar 文本颜色

java - 在方法的参数中使用 OR

java - 运行java程序时,报告找不到类