在运行时检测java类以监视性能-->;有没有一个工具已经做到了这一点?

在运行时检测java类以监视性能-->;有没有一个工具已经做到了这一点?,java,monitoring,aspectj,instrumentation,Java,Monitoring,Aspectj,Instrumentation,我一直在研究各种java性能监视工具 我制定了一个使用perf4j+aspectj的解决方案,这样我就可以用aspectj切入点表达式定义要监视的类。但是aspectj(AFAIK)也不允许您在运行时更改切入点表达式。因此,如果我需要监视新类,我必须更改aop.xml并重新编译(或者如果使用AspectJ加载时编织,则至少重新启动应用程序) 到目前为止,我还没有发现任何可以在不需要重新启动应用程序的情况下在运行时为类添加工具的东西。有没有一种工具/技术可以做到这一点?这些类型的工具通常不会在运行

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

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


到目前为止,我还没有发现任何可以在不需要重新启动应用程序的情况下在运行时为类添加工具的东西。有没有一种工具/技术可以做到这一点?

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

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

你的装备,JProfiler

有一些开源工具,但我还没有发现它们中的任何一个能像商业上的同类工具那样精巧。

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

还有一个完整的项目专门用于这些工具:

还有一些有趣的插件:

找到了一个完美的小图书馆,它正好满足了我的需要。它通过在运行时操作插入指令的类的字节码来工作,无需重新启动应用程序。查看以了解设置它有多容易

关于Btrace,另一件值得一提的事情是,作者们已经做出了很多努力,以确保在生产环境中安全工作

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

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

文件如下:

有趣的问题,如果您不介意的话,您可以添加一个场景,您需要为其插入一个类吗?我想不出一个。有一些常见的障碍可能会妨碍您(请看这个问题)。JRat()是一个著名的开源分析器。查看源代码应该没问题。visualvm缺少一些特性。它几乎没有jprofiler或yourkit这样的功能,尽管在某些情况下它可能非常有用。有两点1/我不喜欢在生产环境中运行探查器。2/这不是免费的。请务必在回复中披露您与推荐产品的联系。