关于监控:在运行时检测 java 类以监控性能 –> 有没有工具已经这样做了?

Instrument java classes at runtime to monitor performance --> is there a tool that already does this?

我一直在研究各种 java 性能监控工具。

我制定了一个使用 perf4j aspectj 的解决方案,这样我就可以使用 aspectj 切入点表达式定义要监视的类。然而 aspectj 也(AFAIK),不允许您在运行时更改切入点表达式。因此,如果我需要监视新类,我将不得不更改 aop.xml 并重新编译(或者如果使用 AspectJ 加载时间编织,则至少重新启动应用程序)。

到目前为止,我还没有发现任何可以在运行时检测类而无需重新启动应用程序的东西。有没有可以做到这一点的工具/技术?


这些类型的工具通常不会在运行时检测类。相反,他们使用 JVMTI 接口(如果你不明白这是什么,请用谷歌搜索)。

使用它的主要产品示例:

Yourkit,JProfiler

有一些开源工具,但我还没有真正发现它们中的任何一个都像商业同行一样完美。


找到了一个完美的小型库 BTrace,它正是我所需要的。它通过在运行时操作检测类的字节码来工作,无需重新启动应用程序。查看用户指南,了解设置它的难易程度。

关于 Btrace 的另一点值得一提的是,作者为使其在生产环境中工作的安全性付出了很多努力。

To guarantee that the tracing actions are"read-only" (i.e., the trace actions don't change the state of the program traced) and bounded (i.e., trace actions terminate in bounded time), a BTrace program is allowed to do only a restricted set of actions.


正如 Matt 所说,YouKit Java Profiler 可以检测 Java 字节码。 YourKit 允许编写自己的探针并将它们插入到正在运行的 Java 应用程序中。 Probe API 允许访问方法参数、返回值、捕获异常等。

文档在这里:
http://www.yourkit.com/docs/11/help/probes.jsp


我建议使用 Eclipse(或 NetBeans)的调试器/分析器。
它非常强大。

还有一个专门用于这些工具的完整项目:
http://www.eclipse.org/projects/project.php?id=tptp.performance

还有一些有趣的插件:
http://code.google.com/a/eclipselabs.org/p/jvmmonitor/