Java 监控工具,可以查看 "real time" 处的堆栈跟踪

Java monitoring tool which will allow to see the stacktrace at "real time"

我在用 java 编写的非常大的 Web 项目上工作。 当我单击某个按钮或执行其他操作时,我很难理解应用程序代码中调用了哪些方法(因为我是项目新手,应用程序真的很大)。所以我想知道是否有一种工具允许以给定的时间间隔(比如每 100 毫秒)获取某些线程的堆栈跟踪。 我知道 VisualVm 但它不允许这样做,我只能在一个时间点使线程变笨(无法连续获取堆栈跟踪)。

有人可以推荐工具或任何技术来让我在 运行 时监控方法调用吗? 谢谢

您可以通过多种方式检查堆栈跟踪:

  • 使用 jconsole 的线程选项卡,您可以在其中查看哪些线程处于活动状态以及它们处于什么状态。
  • 使用 JvisualVm(安装 jdk 时需要付费)或者当您 运行 处于开发模式时,您可以使用 jprofiler/yourkit 等任何分析器来查看堆栈跟踪。
  • 你可以在 unix 中 运行ning kill -3 pid 或 windows
  • 上的 control + break 每分钟获取堆栈跟踪
  • 您可以使用 jstack 命令获取跟踪。
  • 您可以使用 IDE(eclipse/netbeans/Intellij 等)调试代码,并在每个方法调用之后跟踪方法调用。

对于这种情况,我使用 Java 任务控制。全部功能适用于 Oracle JDK,对于 OpenJDK 并非一切正常。 More info

来自网站:

Starting with the release of Oracle JDK 7 Update 40 (7u40), Java Mission Control is bundled with the HotSpot JVM.

您需要在 JVM 中添加以下参数才能使用它。注意:我通常还会添加调试选项。

JAVA_DEBUG="-Xdebug -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n"
JAVA_JMC="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=3614 -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false -XX:+UnlockCommercialFeatures -XX:+FlightRecorder"

然后您需要远程连接到端口 3614,您将能够看到 JVM 内部。在那里您将能够分析 CPU、检查分配和死锁检测 + select 线程并查看当前正在执行的内容。以及其他一些图表和有价值的信息。

存在许多用于 Java VM 监视和应用程序监视的工具。例如,参见 eG Java Application Monitor:

...the eG Java Monitor gives you a comprehensive view of the activities within a JVM:

  • It lets you see which threads are running in the JVM and what state they are in (such as runnable, blocked, waiting, timed waiting, deadlocked, or high CPU).
  • You also have access to a stack trace for each thread showing class, method, and line of code (to troubleshoot problems down to the line of code level).
  • And you can monitor the performance of garbage collection processes, CPU and memory usage, and JVM restarts.