Skip to content

记录一个操作导致arthas卡死问题 ClassCircularityError: com/alibaba/arthas/deps/ch/qos/logback/classic/spi/ThrowableProxy #3153

Open
harshinimareddy/arthas
#1

Description

@hengyunabc

启动 math-game.jar 。然后arthas attach之后执行:

$ options unsafe true
 NAME    BEFORE-VALUE  AFTER-VALUE
-----------------------------------
 unsafe  false         true
$ stack 'java.util.zip.ZipFile$ZipFileInflaterInputStream' '<init>' -n 20
Press Q or Ctrl+C to abort.

可以发现arthas shell 卡死了。用 jstack 查看,也没有明显的死锁。但是退出 math-game.jar 会有下面的异常信息:

Exception in thread "as-shutdown-hooker" java.lang.ClassCircularityError: com/alibaba/arthas/deps/ch/qos/logback/classic/spi/ThrowableProxy
        at com.alibaba.arthas.deps.ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:119)
        at com.alibaba.arthas.deps.ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:419)
        at com.alibaba.arthas.deps.ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383)
        at com.alibaba.arthas.deps.ch.qos.logback.classic.Logger.error(Logger.java:538)
        at com.taobao.arthas.core.server.ArthasBootstrap.destroy(ArthasBootstrap.java:535)
        at com.taobao.arthas.core.server.ArthasBootstrap$2.run(ArthasBootstrap.java:179)

如果先任意执行一个 arthas 的其它的 watch/trace 命令,再执行 stack 'java.util.zip.ZipFile$ZipFileInflaterInputStream' '<init>' -n 20就不会死锁。

Activity

  1. weilhuang commented on Mar 23, 2026

    @weilhuang
    Contributor

    看起来是因为 stack 等命令执行时如果去加载了像arthas-core的类就会走到ZipFileInflaterInputStream, 回调将再次进入SpyImpl导致ClassCircularityError异常, 而先跑别的 watch/trace 相当于提前把相关类加载好了.

    在回调时候判断一下深度然后跳出就可以解决

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions