当使用VisualVM进行应用程序的cpu-profiling时,我遇到了错误
“Profiler代理错误:带消息:重新定义失败,错误66”。
然后,它将所有类文件从构建路径复制到我启动应用程序的位置。
我试图找到一些关于它的信息,错误代码意味着(根据JVMTI文档):
JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED(66)
直接超类对于新类版本是不同的,或者直接实现的接口集是不同的。
由于分析通常适用于我的环境(Java build 1.7.0_09-b05,Fedora 17 64位)。我在Visualvm-docs中尝试过“-Xshare:off”,没有任何影响。
由于这是我遇到此问题的唯一Java-SE应用程序,它似乎与我正在使用的库有某种关联。以下是我的类路径:
任何人都可以看到库和错误之间的相关性吗?我真的不知道了。
答案 0 :(得分:5)
看起来这可能是由JPA造成的。您可以使用Sampler
代替Profiler
。另一种可能性是定义根方法和检测过滤器,以便由VisualVM分析由JPA检测的类。请参阅Profiling With VisualVM, Part 1和Profiling With VisualVM, Part 2以获取有关分析以及如何设置分析根和检测过滤器的更多信息。
答案 1 :(得分:0)
一个小小的补充:在分析使用OpenJPA的应用程序时,我有相同的错误消息。只需单击"确定"错误似乎就消失了。在每个错误对话框中,只要您不关闭应用程序。
因此,您只需按下按钮即可重置收集的结果并再次运行代码。例如。通过在循环中运行它并使用new Scanner(System.in).nextLine()
或通过UI中的按钮单击。