我一直在研究各种 java 性能监控工具。
我制定了一个使用 perf4j + aspectj 的解决方案,这样我就可以使用 aspectj 切入点表达式定义要监视的类。然而 aspectj 也(AFAIK),不允许您在运行时更改切入点表达式。因此,如果我需要监视新类,我将不得不更改 aop.xml 并重新编译(或者如果使用 AspectJ 加载时间编织,至少要重新启动应用程序)。
到目前为止,我还没有找到任何可以在运行时检测类而无需重新启动应用程序的东西。有没有可以做到这一点的工具/技术?
我一直在研究各种 java 性能监控工具。
我制定了一个使用 perf4j + aspectj 的解决方案,这样我就可以使用 aspectj 切入点表达式定义要监视的类。然而 aspectj 也(AFAIK),不允许您在运行时更改切入点表达式。因此,如果我需要监视新类,我将不得不更改 aop.xml 并重新编译(或者如果使用 AspectJ 加载时间编织,至少要重新启动应用程序)。
到目前为止,我还没有找到任何可以在运行时检测类而无需重新启动应用程序的东西。有没有可以做到这一点的工具/技术?
这些类型的工具通常不会在运行时检测类。相反,他们使用 JVMTI 接口(如果你不明白这是什么,谷歌它)。
使用它的产品的主要示例:
Yourkit,JProfiler
有一些开源工具,但我还没有真正发现它们中的任何一个都像商业同行一样完善。
我建议使用 Eclipse(或 NetBeans)的调试器/分析器。
它非常强大。
还有一个专门用于这些工具的完整项目:http:
//www.eclipse.org/projects/project.php?id=tptp.performance
和一些有趣的插件:
http ://code.google.com/a/eclipselabs.org/p/jvmmonitor/
正如 Matt 所说,YouKit Java Profiler可以检测 Java 字节码。YourKit 允许编写自己的探针并将它们插入到正在运行的 Java 应用程序中。Probe API 允许访问方法参数、返回值、捕获异常等。