附加Java VisualVM以进行CPU分析会导致JVMTI错误66

时间:2012-12-25 21:48:51

标签: java visualvm jvmti

当使用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应用程序,它似乎与我正在使用的库有某种关联。以下是我的类路径:

  • Log4j 1.2.17
  • Apache OpenJPA 2.2.1
  • Commons Configuration 1.9
  • Commons Pool 1.6
  • Postgresql 9.1-901jdbc4
  • imgscalr-LIB-4.2

任何人都可以看到库和错误之间的相关性吗?我真的不知道了。

2 个答案:

答案 0 :(得分:5)

看起来这可能是由JPA造成的。您可以使用Sampler代替Profiler。另一种可能性是定义根方法和检测过滤器,以便由VisualVM分析由JPA检测的类。请参阅Profiling With VisualVM, Part 1Profiling With VisualVM, Part 2以获取有关分析以及如何设置分析根和检测过滤器的更多信息。

答案 1 :(得分:0)

一个小小的补充:在分析使用OpenJPA的应用程序时,我有相同的错误消息。只需单击"确定"错误似乎就消失了。在每个错误对话框中,只要您不关闭应用程序。

因此,您只需按下按钮即可重置收集的结果并再次运行代码。例如。通过在循环中运行它并使用new Scanner(System.in).nextLine()或通过UI中的按钮单击。