附加Java VisualVM进行CPU评测会导致JVMTI错误66
当使用VisualVM对我的应用程序进行cpu评测时,我遇到了错误 “探查器代理错误:消息为:重新定义失败,错误为66” 在此基础上,它将所有类文件从构建路径复制到启动应用程序的位置 我试图找到一些关于它的信息,错误代码意味着(根据JVMTI文档): JVMTI错误\u不支持\u重新定义\u层次结构\u更改(66)附加Java VisualVM进行CPU评测会导致JVMTI错误66,java,visualvm,jvmti,Java,Visualvm,Jvmti,当使用VisualVM对我的应用程序进行cpu评测时,我遇到了错误 “探查器代理错误:消息为:重新定义失败,错误为66” 在此基础上,它将所有类文件从构建路径复制到启动应用程序的位置 我试图找到一些关于它的信息,错误代码意味着(根据JVMTI文档): JVMTI错误\u不支持\u重新定义\u层次结构\u更改(66) 对于新的类版本,直接超类是不同的,或者直接实现的接口集是不同的 因为评测通常在我的环境中工作(Java build 1.7.0_09-b05,Fedora 17 64位)。我已经尝试
对于新的类版本,直接超类是不同的,或者直接实现的接口集是不同的 因为评测通常在我的环境中工作(Java build 1.7.0_09-b05,Fedora 17 64位)。我已经尝试了Visualvm文档中所说的“-Xshare:off”,但没有任何效果 由于这是我遇到此问题的唯一一个JavaSE应用程序,因此它似乎与我正在使用的库有某种关联。我的类路径中有以下内容:
- Log4j 1.2.17
- ApacheOpenJPA2.2.1
- Commons配置1.9
- 共用池1.6
- Postgresql 9.1-901jdbc4
- imgscalr-lib-4.2
有人能看到库和错误之间的关联吗?我真的没有主意了。看来这可能是由JPA引起的。您可以使用
Sampler
而不是Profiler
。另一种可能性是定义根方法和插装过滤器,这样由JPA插装的类就不会被VisualVM分析。有关评测以及如何设置评测根和检测筛选器的更多信息,请参阅和。一个小补充:评测使用OpenJPA的应用程序时,我收到了相同的错误消息。只要不关闭应用程序,只要在每个错误对话框中单击“确定”,错误似乎就会消失
因此,只需按下按钮即可重置收集的结果并再次运行代码。例如,在循环中运行它,并使用
新扫描仪(System.in).nextLine()
或通过在UI中单击按钮。JPA实现倾向于执行字节码指令插入(需要支持延迟加载之类的操作)。如果没有太多工作,请尝试切换JPA提供程序?Openjpa嵌套到deep,并且由于(根据我的信息)分离/附加托管实体的独特处理,很遗憾无法切换。感谢您的提示-采样运行没有问题。事实上(真丢脸)我一直认为我在做采样在使用分析选项时所做的事情。注意!不幸的是,JVisualVM没有直接显示JPA实体中的方法调用。根据您想要实现的目标,这可能是问题,也可能不是问题。