java - 从 Java 内部监控 Java

标签 java monitoring visualization monitor

我想通过将程序的方法调用显示为树的分支来编写 Java 程序的简单可视化。这可以通过让程序本身告诉可视化它正在做什么来完成,但我希望能够使用任何 Java 方法/类来完成此操作,而不仅仅是我修改的方法/类。

我需要的是能够观察程序调用的方法以及该方法中调用了哪些方法等等。显然,堆栈跟踪恰好提供了此功能:

 java.lang.NullPointerException
     at MyClass.mash(MyClass.java:9)
     at MyClass.crunch(MyClass.java:6)
     at MyClass.main(MyClass.java:3)

所以我考虑让我想要监视的程序在一个线程中运行,然后只查看该线程的堆栈。然而,线程类并不真正支持这一点。它仅支持打印当前堆栈。

现在我当然想到简单地更改 System 类的 PrintStream,以便线程将其堆栈打印到我的 PrintStream 中,但这感觉有点不对。

有更好的方法吗?我可以使用任何预先存在的类/方法吗?

另外,我目前正在下载 Java 源代码,以检查线程类如何准确地打印其堆栈,以便我可以子类化线程并使用我自己的 getStack() 方法来模拟 dumpStack() 方法。

最佳答案

另请参阅 VisualVM,它随最新的 Java 版本一起提供。

关于java - 从 Java 内部监控 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1617271/

相关文章:

azure - 基于脚本的 Azure 警报

monitoring - 有什么方法可以监控 Airflow DAG 的执行时间?

r - 同一图上的多条频率线,其中 y 是字符值

r - 为什么ggplot2中的facet_wrap()可以用波形符(~)或vars()来表示?

java - 用于处理 docx 文档的 Apache POI 或 docx4j

java - 如何使用 Android 模拟器在 Saucelabs 上运行 .apk?

java - 如何读取放置在 war 之外的属性文件?

java - PaintComponent 中使用 BorderFactory 的图形工件

redis - 如何获取整个 Redis 集群的 INFO 状态?

performance - 高性能实时数据显示