arthas icon indicating copy to clipboard operation
arthas copied to clipboard

调用http API retransform接口,概率性出现Cannot interrupt process in TERMINATED state

Open jinlong2010 opened this issue 1 year ago • 3 comments

  • [ ] 我已经在 issues 里搜索,没有重复的issue。

环境信息

  • arthas-boot.jar 或者 as.sh 的版本:3.7.1
  • Arthas 版本: 3.7.1
  • 操作系统版本: bclinux
  • 目标进程的JVM版本: jdk1.8
  • 执行arthas-boot的版本: 3.7.1

重现问题的步骤

  1. 调用http API retransform接口,概率性出现Cannot interrupt process in TERMINATED state
  2. 概率性出现,不是每次都出现

期望的结果

retransform热部署成功

实际运行的结果

retransform热部署未成功,出现查询class是成功的,实际运行代码没有成功。

2025-01-04 09:34:51 [arthas-NettyWebsocketTtyBootstrap-4-1] INFO  c.a.a.d.i.n.h.logging.LoggingHandler -[id: 0x7b5588b9, L:/7.227.10.168:8563] READ: [id: 0x8f5767d2, L:/7.227.10.168:8563 - R:/10.165.36.20:63971]
2025-01-04 09:34:51 [arthas-NettyWebsocketTtyBootstrap-4-1] INFO  c.a.a.d.i.n.h.logging.LoggingHandler -[id: 0x7b5588b9, L:/7.227.10.168:8563] READ COMPLETE
2025-01-04 09:34:51 [arthas-command-execute] INFO  c.t.a.c.c.k.RetransformCommand -Try retransform class name: org.cache.OutClient, ClassLoader: ExtensionWebappClassLoader
  context: bes
  delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@17a7f733

2025-01-04 09:34:51 [arthas-command-execute] INFO  c.t.a.c.c.k.RetransformCommand -RetransformCommand match class: org.cache.OutClient, id: 12, classLoaderClass: null, hashCode: null
2025-01-04 09:34:52 [arthas-TermServer-1-17] ERROR c.t.a.c.s.t.i.h.api.HttpApiHandler -process http api request failed: Cannot interrupt process in TERMINATED state
java.lang.IllegalStateException: Cannot interrupt process in TERMINATED state
	at com.taobao.arthas.core.shell.system.impl.ProcessImpl.interrupt(ProcessImpl.java:156)
	at com.taobao.arthas.core.shell.system.impl.ProcessImpl.interrupt(ProcessImpl.java:138)
	at com.taobao.arthas.core.shell.system.impl.JobImpl.interrupt(JobImpl.java:58)
	at com.taobao.arthas.core.shell.session.impl.SessionManagerImpl.removeSession(SessionManagerImpl.java:82)
	at com.taobao.arthas.core.shell.term.impl.http.api.HttpApiHandler.processExecRequest(HttpApiHandler.java:470)
	at com.taobao.arthas.core.shell.term.impl.http.api.HttpApiHandler.dispatchRequest(HttpApiHandler.java:273)
	at com.taobao.arthas.core.shell.term.impl.http.api.HttpApiHandler.processRequest(HttpApiHandler.java:254)
	at com.taobao.arthas.core.shell.term.impl.http.api.HttpApiHandler.handle(HttpApiHandler.java:103)
	at com.taobao.arthas.core.shell.term.impl.http.HttpRequestHandler.channelRead0(HttpRequestHandler.java:72)
	at com.taobao.arthas.core.shell.term.impl.http.HttpRequestHandler.channelRead0(HttpRequestHandler.java:31)
	at com.alibaba.arthas.deps.io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
	at com.alibaba.arthas.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at com.alibaba.arthas.deps.io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:61)
	at com.alibaba.arthas.deps.io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:425)
	at com.alibaba.arthas.deps.io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
	at com.alibaba.arthas.deps.io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
	at com.alibaba.arthas.deps.io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
	at com.alibaba.arthas.deps.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
	at com.alibaba.arthas.deps.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at com.alibaba.arthas.deps.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at com.alibaba.arthas.deps.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:750)

jinlong2010 avatar Jan 04 '25 01:01 jinlong2010

我也遇到了,有解决吗?

yande2011 avatar Sep 25 '25 08:09 yande2011

可能 retransform 执行失败了,检查下 ~/logs/arthas/arthas.log 。另外,试下对同样的 .class 直接在命令行执行 retransform 是否能成功。

hengyunabc avatar Oct 11 '25 02:10 hengyunabc

重新试几次就可以成功

yande2011 avatar Oct 29 '25 06:10 yande2011