启动 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就不会死锁。