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.
我在用 java 编写的非常大的 Web 项目上工作。 当我单击某个按钮或执行其他操作时,我很难理解应用程序代码中调用了哪些方法(因为我是项目新手,应用程序真的很大)。所以我想知道是否有一种工具允许以给定的时间间隔(比如每 100 毫秒)获取某些线程的堆栈跟踪。 我知道 VisualVm 但它不允许这样做,我只能在一个时间点使线程变笨(无法连续获取堆栈跟踪)。
有人可以推荐工具或任何技术来让我在 运行 时监控方法调用吗? 谢谢
您可以通过多种方式检查堆栈跟踪:
- 使用 jconsole 的线程选项卡,您可以在其中查看哪些线程处于活动状态以及它们处于什么状态。
- 使用 JvisualVm(安装 jdk 时需要付费)或者当您 运行 处于开发模式时,您可以使用 jprofiler/yourkit 等任何分析器来查看堆栈跟踪。
- 你可以在 unix 中 运行ning
kill -3 pid
或 windows 上的 - 您可以使用 jstack 命令获取跟踪。
- 您可以使用 IDE(eclipse/netbeans/Intellij 等)调试代码,并在每个方法调用之后跟踪方法调用。
control + break
每分钟获取堆栈跟踪
对于这种情况,我使用 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.