尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Arthas stop 命令详解:优雅关闭诊断服务、断开全部客户端并重置增强类
Arthas stop 命令详解优雅关闭诊断服务、断开全部客户端并重置增强类【免费下载链接】arthasAlibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas项目地址: https://gitcode.com/gh_mirrors/ar/arthasArthas 是一款 Alibaba 开源的 Java 在线诊断工具允许开发者在生产环境不重启应用的情况下实时排查问题。stop命令是 Arthas 中最具全局影响力的关闭指令它用于终止整个 Arthas 服务端所有连接到该服务端的 Arthas 客户端会全部退出。本文以 site/docs/en/doc/stop.md 为主体结合仓库中的命令实现与引导类源码深入讲解stop命令的功能、底层执行流程及其与reset、redefine/retransform的关系帮助你安全、正确地关闭 Arthas 诊断会话。stop 命令的功能概述根据官方文档stop命令的核心作用是terminates the Arthas server, all the Arthas clients connecting to this server will be disconnected.终止 Arthas 服务端所有连接到该服务端的 Arthas 客户端都将断开连接。也就是说stop并不是简单地退出当前终端会话而是对整个 Arthas 服务端执行关停操作。服务端关闭后通过 telnet、WebSocketWeb Console等渠道连接上来的所有 Arthas 客户端会话都会被一并销毁。同时官方文档中文版见 site/docs/doc/stop.md特别强调了一条关键提示关闭 Arthas 服务器之前会重置掉所有做过的增强类。但是用 redefine 和 retransform 重加载的类内容不会被重置。这条提示道出了stop与普通退出命令的本质区别关闭服务端之前会自动执行一次全局类增强重置但通过redefine/retransform直接重定义字节码的类内容则保留不变。stop 命令的适用场景Arthas 的所有诊断命令如watch、trace、stack、monitor等本质上都是通过字节码注入byte-code-injection在目标类中织入切面逻辑来实现监控与统计的。在官方命令总览文档 site/docs/en/doc/commands.md 中明确指出commands here are taking advantage of byte-code-injection... remember to remove the injected code bystoporreset. 这些命令利用了字节码注入技术……记得使用stop或reset移除注入的代码。因此stop的典型适用场景包括排查完成后的收尾在线诊断任务结束需要一次性清除所有增强效果、断开所有客户端并将目标应用恢复到未诊断状态关闭 Arthas 服务端进程不再需要 Arthas 监听端口与后台服务彻底关停服务端批量会话管理存在多个客户端连接时通过一条stop命令统一断开所有会话而不必逐一执行退出操作。如何在 Arthas 中使用 stop在 Arthas 交互式控制台中直接输入stop并回车即可无需任何参数$ stop Resetting all enhanced classes ... Affect(class count: 12 , method count: 20) cost in 42 ms, listenerId: 0 Arthas Server is going to shutdown...命令执行后当前控制台会退出其余所有连接到该服务端的客户端也会同时断开。从源码看stop命令被定义为无参命令声明如下见 StopCommand.javaName(stop) Summary(Stop/Shutdown Arthas server and exit the console.) public class StopCommand extends AnnotatedCommand {Summary注释明确了两层语义关闭/停止 Arthas 服务端Stop/Shutdown Arthas server以及退出控制台exit the console。stop 的底层执行流程源码级解析stop命令的处理逻辑集中在StopCommand.shutdown(CommandProcess process)方法中见 StopCommand.java其执行流程分为重置增强类 → 发送关停消息 → 销毁服务端三个步骤第一步重置所有增强类resetprocess.appendResult(new MessageModel(Resetting all enhanced classes ...)); EnhancerAffect enhancerAffect arthasBootstrap.reset(); process.appendResult(new ResetModel(enhancerAffect));在执行关停动作之前命令首先向客户端输出Resetting all enhanced classes ...提示随后调用ArthasBootstrap.reset()执行全局增强重置并把重置结果以ResetModel的形式回显包含受影响的类数量、方法数量与耗时统计。这解释了我们在控制台看到的Affect(class count: ... , method count: ...)输出。reset()的底层实现位于 ArthasBootstrap.javapublic EnhancerAffect reset() throws UnmodifiableClassException { return Enhancer.reset(this.instrumentation, new WildcardMatcher(*)); }它借助java.lang.instrument的instrumentation机制以通配符*匹配目标应用中所有被增强的类并逐一还原字节码。这正是文档所强调的关闭服务器之前会重置掉所有做过的增强类的源码依据——stop内部复用了与reset命令相同的增强还原逻辑。第二步发送关停消息并结束当前进程process.appendResult(new ShutdownModel(true, Arthas Server is going to shutdown...));重置完成后命令构造ShutdownModel向客户端广播Arthas Server is going to shutdown...消息然后调用process.end()结束当前命令处理流程。ShutdownModel会通知所有会话准备退出这也是所有客户端同时断开的通信基础。第三步销毁服务端destroy} finally { process.end(); arthasBootstrap.destroy(); }无论上述步骤是否成功finally块都会调用ArthasBootstrap.destroy()对服务端做最终清理。从 ArthasBootstrap.java 的destroy()实现可以看到它负责依次释放 Arthas 的各类资源关闭 MCP 服务arthasMcpBootstrap.shutdown()避免停止后残留调度线程导致ArthasClassLoader无法回收关闭 shell 服务端shellServer.close()与会话管理器sessionManager.close()停止 HTTP 会话管理器httpSessionManager.stop()、取消定时器timer.cancel()停止 Tunnel 客户端tunnelClient.stop()关闭并销毁线程池executorService.shutdownNow()与增强转换器transformerManager.destroy()移除类加载器相关的字节码转换器classLoaderInstrumentTransformer清理Spy类中的引用cleanUpSpyReference()、关闭 Netty 工作线程组、销毁用户统计UserStatUtil.destroy()移除 JVM 关闭钩子shutdown hook并在跨 mount namespace 场景下清理临时 Arthas home 目录。从源码结构看stop并不是简单的断开连接而是一整套完整的服务端生命周期收尾流程目标是让注入的增强全部还原、占用的资源全部释放使目标 JVM 恢复到接近未安装 Arthas 的状态。stop 与 reset、redefine / retransform 的关系理解stop的关键在于区分它与其他命令在类状态处理上的差异命令对已增强类的处理对重新加载类内容的处理对服务端的影响stop自动重置所有增强类与reset等价redefine / retransform 重新加载的类内容不会被重置终止整个服务端断开所有客户端reset重置所有增强类同上不关闭服务端会话继续可用redefine/retransform直接重定义/重转换目标类字节码属于永久性类内容变更不涉及服务端生命周期这里需要特别强调官方文档的 tip使用redefine或retransform命令重加载的类内容不会被stop重置。其原因可以从实现层面理解reset只负责还原通过字节码注入enhancement方式产生的增强而redefine/retransform是对类字节码本身的直接重定义其效果不归属于增强范畴因此不会在关停时被自动还原。如果你的线上排查过程中用到了这两个命令且希望在关闭 Arthas 后彻底恢复原类字节码需要在关停之前自行评估并手动恢复。使用 stop 的注意事项stop是服务端级操作它会关闭 Arthas 服务端并断开所有客户端会话不只是当前终端。请确认没有其他正在使用的会话再执行该命令。增强类会被自动重置正常通过watch、trace等命令注入的增强会在关停前被自动清除一般无需担心增强残留这也是官方建议在排查结束后使用stop或reset清理注入代码的原因。redefine / retransform 的结果不会被重置这两类命令造成的类内容变更在stop后依然保留若需还原需提前处理。执行后服务端不可再用stop之后 Arthas 服务端进程被销毁需要重新诊断时必须重新启动 Arthas参考 start-arthas.md再建立新的客户端连接。延伸阅读stop 命令英文文档 与 stop 命令中文文档本文的直接依据reset 命令文档了解手动重置增强类的用法redefine 命令文档 与 retransform 命令文档理解这两类不受重置影响的命令命令总览了解全部 Arthas 命令及其与字节码注入的关系StopCommand.javastop命令的入口实现ArthasBootstrap.javareset()与destroy()的完整服务端清理逻辑。【免费下载链接】arthasAlibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas项目地址: https://gitcode.com/gh_mirrors/ar/arthas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Ant Design Progress 仪表盘进度条(Dashboard)实战指南:type 与 gapDegree 完全解析

Ant Design Progress 仪表盘进度条(Dashboard)实战指南:type 与 gapDegree 完全解析

Ant Design Progress 仪表盘进度条(Dashboard)实战指南:type 与 gapDegree 完全解析 【免费下载链接】ant-design An enterprise-class UI design language and React UI library 项目地址: https://gitcode.com/gh_mirrors/ant/ant-design…

📅 2026/9/19 23:48:56
【STM32 实战】HAL 库下 DMA 循环接收 + IDLE 中断 + 状态机实现 SBUS 协议解析

【STM32 实战】HAL 库下 DMA 循环接收 + IDLE 中断 + 状态机实现 SBUS 协议解析

本人是参加过第二十四届,第二十五届RoboCon比赛的参赛队员,本篇文章分享今年我们机器人用的遥控器与SBUS通信代码。 发布这篇文章前所学习研究的文章: STM32 Futaba SBUS协议解析:STM32 Futaba SBUS协议解析_接收机与bus-CSDN博客 Robomast…

📅 2026/9/19 23:48:56
TIA博途V15中用SCL实现先进后出堆栈算法

TIA博途V15中用SCL实现先进后出堆栈算法

简介:面向TIA博途V15用户的PLC编程学习资料,以SCL语言详细讲解堆栈算法(先进后出)的工程实现,适合工业自动化工程师、电气设计人员及对高级语言编程感兴趣的PLC开发者。资源为一份docx文档,约1.45MB&#x…

📅 2026/9/19 23:43:56
MORE NEWS

更多资讯

📰

考博英语命题逻辑与量化备考:从题型边界到主观题评分矩阵

简介:PDF文档《博士生入学考试英语备考指南》由清华大学出版社出版,面向报考博士研究生的考生,系统梳理了博士生英语入学考试的核心题型、难度层次与备考要点,既适合首次备考者建立整体认知,也适合考前冲刺阶段查漏补缺…

📰

Cursor 是编程提效工具,Base URL 走 TaoToken 通道行不行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

CC Switch 里 TaoToken 当默认供应商:Qwen3.7 Plus 一键切换

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Windows 11预览功能彻底关闭指南:三层机制深度解析

1. 这个“预览”到底在预览什么?先搞清它的真实身份 很多人一看到文件管理器里点个PDF、点个图片就弹出右侧那个半透明窗格,第一反应就是“哦,这是Windows 11新加的‘预览窗格’”,然后直奔设置里去关——结果发现关了又开&#…

📰

自考04747《Java语言程序设计(一)》考点清单:从基础语法到经典算法题

简介:面向高等教育自学考试考生整理的《Java语言程序设计(一)》(课程代码04747)复习资料PDF,聚焦Java语言基础,可作为自考课程配套辅导与考前冲刺用书。资源为单个PDF文件,大小1.23M…

📰

Hasura GraphQL Engine 元数据乐观并发控制(Optimistic Concurrency Control)设计解析

后端API网关数据库GraphQL 【免费下载链接】graphql-engine Blazing fast, instant realtime GraphQL APIs on all your data with fine grained access control, also trigger webhooks on database events. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬