4

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

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

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

4

4 回答 4

3

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

使用它的产品的主要示例:

Yourkit,JProfiler

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

于 2012-08-02T14:58:01.997 回答
1

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

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

为了保证跟踪动作是“只读的”(即,跟踪动作不会改变被跟踪程序的状态)和有界(即,跟踪动作在有限时间内终止),BTrace 程序只允许一组受限的动作。

于 2012-08-08T05:55:12.660 回答
0

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

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

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

于 2012-08-02T15:06:07.273 回答
0

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

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

于 2012-08-10T12:26:42.020 回答