【问题标题】:jstack in mixed mode: WrongTypeException: No suitable match for type of address混合模式下的jstack:WrongTypeException:没有合适的地址类型匹配
【发布时间】:2021-11-13 23:02:21
【问题描述】:

我正在尝试以混合模式在 ubuntu 上运行 jstack:

 $ jstack -m 7219     

结果是这个异常:

Attaching to process ID 7219, please wait...
Debugger attached successfully.
Server compiler detected.
  JVM version is 25.162-b12
  Exception in thread "main" 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:498)
    at sun.tools.jstack.JStack.runJStackTool(JStack.java:140)
    at sun.tools.jstack.JStack.main(JStack.java:106)
 Caused by: java.lang.RuntimeException: Unable to deduce type of thread from address 0x00007f02cc002800 (expected type JavaThread, CompilerThread, ServiceThread, JvmtiAgentThread, or SurrogateLockerThread)
    at sun.jvm.hotspot.runtime.Threads.createJavaThreadWrapper(Threads.java:166)
    at sun.jvm.hotspot.runtime.Threads.first(Threads.java:150)
    at sun.jvm.hotspot.tools.PStack.initJFrameCache(PStack.java:200)
    at sun.jvm.hotspot.tools.PStack.run(PStack.java:71)
    at sun.jvm.hotspot.tools.PStack.run(PStack.java:58)
    at sun.jvm.hotspot.tools.PStack.run(PStack.java:53)
    at sun.jvm.hotspot.tools.JStack.run(JStack.java:66)
    at sun.jvm.hotspot.tools.Tool.startInternal(Tool.java:260)
    at sun.jvm.hotspot.tools.Tool.start(Tool.java:223)
    at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
    at sun.jvm.hotspot.tools.JStack.main(JStack.java:92)
    ... 6 more
  Caused by: sun.jvm.hotspot.types.WrongTypeException: No suitable match for type of address 0x00007f02cc002800
    at sun.jvm.hotspot.runtime.InstanceConstructor.newWrongTypeException(InstanceConstructor.java:62)
    at sun.jvm.hotspot.runtime.VirtualConstructor.instantiateWrapperFor(VirtualConstructor.java:80)
    at sun.jvm.hotspot.runtime.Threads.createJavaThreadWrapper(Threads.java:162)
    ... 16 more

PID 为 7219 的进程是使用与 jstack 相同的用户启动的。

【问题讨论】:

  • 这可能是 HotSpot Serviceability Agent 中的错误,也可能是在 JVM 处于不一致状态时尝试获取堆栈跟踪。在这两种情况下,你几乎无能为力。
  • 为什么要-m模式?如果您对非 Java 堆栈感兴趣,那么gdb 应该是更好的工具。
  • 我正在观察 Web 应用程序中长时间运行的请求。线程转储指向本机类加载方法。我在stackoverflow.com/questions/49507981/… 的问题导致了这个工具问题。

标签: java multithreading ubuntu jstack


【解决方案1】:

我在 Ubuntu 上遇到了同样的问题,安装了 openjdk-9-jdk-headless,单独使用 jstack 可以正常工作,但 jstack -m 会失败并出现与您相同的错误。

安装openjdk-9-dbg(带调试符号的包)解决了它。

【讨论】:

  • 完全相同的问题:没有混合模式标志的 jstack 运行良好。但我使用的是 Oracle jdk 1.8.0_172。
【解决方案2】:

同一个用户没问题,但还要确保您使用的 jstack 与运行进程 7219 的那个 完全相同 JVM 捆绑在一起。

【讨论】:

  • 感谢您的提示。我正在使用运行该进程的 jvm 的 jstack。
【解决方案3】:

我在 openjdk-8 上使用 HSDB 时遇到了同样的问题。安装 lib sudo apt-get install openjdk-8-dbg 有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多