我从事用java编写的非常大的网络项目。当我单击某个按钮或执行其他操作时,我很难理解应用程序代码中调用了哪些方法(因为我是项目新手,而且应用程序真的很大)。所以我想知道是否有一个工具可以让你以给定的时间间隔(比如每 100 毫秒)获取一些线程的堆栈跟踪。我知道 VisualVm,但它不允许这样做,我只能在某个时间点让线程哑(没有办法连续获取堆栈跟踪)。
有人可以建议允许我在运行时监视方法调用的工具或任何技术吗?谢谢
我从事用java编写的非常大的网络项目。当我单击某个按钮或执行其他操作时,我很难理解应用程序代码中调用了哪些方法(因为我是项目新手,而且应用程序真的很大)。所以我想知道是否有一个工具可以让你以给定的时间间隔(比如每 100 毫秒)获取一些线程的堆栈跟踪。我知道 VisualVm,但它不允许这样做,我只能在某个时间点让线程哑(没有办法连续获取堆栈跟踪)。
有人可以建议允许我在运行时监视方法调用的工具或任何技术吗?谢谢
有多种方法可以检查堆栈跟踪:
kill -3 pid
您可以通过在 unix 或control + break
Windows 上运行每分钟获取堆栈跟踪信息对于这种情况,我使用 Java Mission Control。全部功能适用于 Oracle JDK,对于 OpenJDK,并非一切都正常工作。更多信息
从网站:
从 Oracle JDK 7 Update 40 (7u40) 的发布开始,Java Mission Control 与 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、检查分配和死锁检测 + 选择线程并查看当前正在执行的内容。以及其他一些图表和有价值的信息。
存在许多用于 Java VM 监控和应用程序监控的工具。例如,请参阅eG Java 应用程序监视器:
...eG Java Monitor 让您全面了解 JVM 中的活动:
- 它可以让您查看 JVM 中正在运行哪些线程以及它们处于什么状态(例如可运行、阻塞、等待、定时等待、死锁或高 CPU)。
- 您还可以访问显示类、方法和代码行的每个线程的堆栈跟踪(以解决代码行级别的问题)。
- 并且您可以监控垃圾收集进程的性能、CPU 和内存使用情况以及 JVM 重启。