【问题标题】:Cannot open some applications in VisualVM无法在 VisualVM 中打开某些应用程序
【发布时间】:2014-06-01 12:56:50
【问题描述】:

我正在使用带有 Oracle JDK 8 的 Ubuntu 14.04。我想使用 VisualVM 检查我的应用程序的性能。我可以检查 JDownloader 等其他应用程序,但不能检查我自己的应用程序和 Eclipse 4.3。在我全新安装 Ubuntu 之前,我使用的是 JDK 7,我没有任何问题,并且在没有任何配置的情况下使用它。它给出了以下日志。

SEVERE [org.openide.util.RequestProcessor]: Error in RequestProcessor com.sun.tools.visualvm.core.ui.DataSourceWindowManager$1
java.lang.IllegalArgumentException: Unexpected composite type for ThreadInfo
    at sun.management.ThreadInfoCompositeData.validateCompositeData(ThreadInfoCompositeData.java:372)
    at sun.management.ThreadInfoCompositeData.getInstance(ThreadInfoCompositeData.java:68)
    at java.lang.management.ThreadInfo.<init>(ThreadInfo.java:263)
    at java.lang.management.ThreadInfo.from(ThreadInfo.java:794)
Caused: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$CompositeBuilderViaFrom.fromCompositeData(DefaultMXBeanMappingFactory.java:1018)
Caused: java.io.InvalidObjectException: Failed to invoke from(CompositeData)
    at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.invalidObjectException(DefaultMXBeanMappingFactory.java:1457)
    at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$CompositeBuilderViaFrom.fromCompositeData(DefaultMXBeanMappingFactory.java:1021)
    at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$CompositeMapping.fromNonNullOpenValue(DefaultMXBeanMappingFactory.java:919)
    at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$NonNullMXBeanMapping.fromOpenValue(DefaultMXBeanMappingFactory.java:133)
    at com.sun.jmx.mbeanserver.ConvertingMethod.fromOpenReturnValue(ConvertingMethod.java:131)
    at com.sun.jmx.mbeanserver.MXBeanProxy.invoke(MXBeanProxy.java:168)
    at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:252)
Caused: java.lang.reflect.UndeclaredThrowableException
    at com.sun.proxy.$Proxy8.getThreadInfo(Unknown Source)
    at com.sun.tools.visualvm.jmx.impl.JmxSupport.isReadOnlyConnection(JmxSupport.java:95)
    at com.sun.tools.visualvm.jmx.impl.JmxModelImpl.isTakeThreadDumpSupported(JmxModelImpl.java:311)
    at com.sun.tools.visualvm.application.views.threads.ApplicationThreadsViewProvider.resolveThreads(ApplicationThreadsViewProvider.java:65)
    at com.sun.tools.visualvm.application.views.threads.ApplicationThreadsViewProvider.supportsViewFor(ApplicationThreadsViewProvider.java:29)
    at com.sun.tools.visualvm.application.views.threads.ApplicationThreadsViewProvider.supportsViewFor(ApplicationThreadsViewProvider.java:25)
    at com.sun.tools.visualvm.core.ui.DataSourceViewsManager.getViews(DataSourceViewsManager.java:116)
    at com.sun.tools.visualvm.core.ui.DataSourceWindowManager.openWindowAndAddView(DataSourceWindowManager.java:169)
    at com.sun.tools.visualvm.core.ui.DataSourceWindowManager.access$000(DataSourceWindowManager.java:30)
    at com.sun.tools.visualvm.core.ui.DataSourceWindowManager$1.run(DataSourceWindowManager.java:80)
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1393)
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2005)

【问题讨论】:

  • JVisualVM 是否也与 Java 8 一起运行?
  • @Holger 它包含在 JDK 8 中。
  • 嗯,奇怪。不幸的是,我无法在这里重现它......
  • 我的时间有限,所以我在另一台安装了 JDK 7 的计算机上分析了我的代码。但是这个问题应该保持开放,以便将来有人可以解决这个问题。

标签: java eclipse java-8 visualvm


【解决方案1】:

使用 jvm 参数运行 eclipse 和您的应用程序 -Duser.language=en -Duser.country=us ...
那么您将能够使用 jvisualvm 进行配置。

对于 ecrise 将这两行放在 eclipse.ini 中

-Duser.language=en
-Duser.country=us

也许你预装的 Ubuntu 的语言设置为英语,你没问题。

【讨论】:

  • 这解决了我在分析本地 Wildfly 实例时无法采样 CPU 的问题,但我很好奇为什么是 这些 参数导致了问题。我们正在维护一个多语言系统,其中包含依赖于这些属性的容器,而更改参数以便我们可以分析某些函数调用并没有多大意义。
  • 没有解决我的问题:/ 在 windows 机器上运行
【解决方案2】:

您应该在与您的应用程序相同的 JDK 版本上运行 visualvm,查看 help->about->details (Java),令人惊讶的是我的是 jdk8 而不是 jdk13 (我都有),所以你可以手动设置visualvm的JDK版本etc/visualvm.conf,取消注释和设置参数

visualvm_jdkhome=C:\Program Files\Java\jdk-13

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多