Arthas是阿里开源的Java 在线诊断工具无需重启服务、无需修改代码、不侵入业务直接在线排查生产/测试环境问题。下面整理最常用、最实用的 8 大使用场景覆盖 90% 开发/运维排查需求1. 生产环境查看实时代码不用重启、不用发布场景线上代码和本地不一致不知道当前 JVM 加载的是哪个版本的 class想确认某个方法逻辑是否正确命令# 反编译查看类代码jad com.example.service.UserService# 只查看某个方法jad com.example.service.UserService getUserById价值直接看到 JVM 里正在运行的真实代码瞬间定位“代码没生效”的问题。2.方法耗时排查接口慢、函数卡顿场景接口 RT 高但不知道哪一步慢想监控某个方法的入参、出参、异常、耗时命令# 监控方法执行耗时、入参、返回值、异常watchcom.example.service.UserService getUserById{params,returnObj,throwExp,cost}# 查看方法调用链路、每一步耗时trace com.example.service.UserService getUserById价值1 分钟定位性能瓶颈不用加日志、不用改代码。3.热更新代码线上紧急修复场景线上有个小 Bug空指针、判断错误不想重启服务临时修复逻辑验证是否正确命令# 1. 反编译保存源码jad --source-only com.example.service.UserService/tmp/UserService.java# 2. 编辑修改vim/tmp/UserService.java# 3. 热加载替换mc/tmp/UserService.java-d/tmp redefine /tmp/com/example/service/UserService.class价值不重启服务在线修复 Bug适合生产紧急场景。4.排查方法没有执行/不生效场景接口调用了但方法没进去条件分支没走AOP/拦截器没生效命令# 监听方法是否被调用monitor com.example.service.UserService getUserById# 追踪方法调用堆栈stack com.example.service.UserService getUserById价值快速确认方法到底有没有被调用、谁调用的、为什么没执行。5.查看 Spring Bean / 配置信息场景想知道 Spring 容器里某个 Bean 是否存在查看 Bean 的属性值如配置、地址、开关命令# 查看 Spring BeanspringBean list# 查看某个 Bean 的属性getstatic com.example.service.UserService userMapper价值不用加日志直接在线查看 Bean 状态。6.JVM 问题排查内存、线程、GC场景CPU 占用高线程死锁频繁 GC、OOM 前排查命令# 查看 JVM 概览dashboard# 查看线程死锁、CPU 高占用thread thread-b# 查死锁thread-n3# 查 CPU 最高的 3 个线程# 查看 GC 情况gc价值生产环境 JVM 问题一键定位比 jstack/jstat 好用太多。7.类冲突、Jar 包冲突场景NoSuchMethodErrorClassNotFoundException多个 Jar 包版本冲突命令# 查看类是从哪个 Jar 加载的sc-dcom.example.service.UserService# 排查类冲突classloader-l价值快速定位JVM 加载的是哪个 Jar 包的类。8.在线调试查看入参、返回值、异常场景线上报错但日志没打全想看到真实入参、返回值、异常堆栈命令# 最常用参数 返回值 异常 耗时watchcom.example.service.UserService *{params, returnObj, throwExp}-x2价值不用加日志实时看到方法完整调用信息。总结什么时候该用 Arthas只要你遇到下面这些情况直接上 Arthas代码和线上不一致接口慢、方法耗时高方法不执行、不生效生产需要紧急热修复CPU/GC/线程异常Jar 包冲突、类加载问题想看实时入参、出参、异常一句话记住Arthas 生产环境 Java 问题在线诊断神器无需重启、无需日志、无需发布在线定位一切问题。
Arthas 核心使用场景
Arthas是阿里开源的Java 在线诊断工具无需重启服务、无需修改代码、不侵入业务直接在线排查生产/测试环境问题。下面整理最常用、最实用的 8 大使用场景覆盖 90% 开发/运维排查需求1. 生产环境查看实时代码不用重启、不用发布场景线上代码和本地不一致不知道当前 JVM 加载的是哪个版本的 class想确认某个方法逻辑是否正确命令# 反编译查看类代码jad com.example.service.UserService# 只查看某个方法jad com.example.service.UserService getUserById价值直接看到 JVM 里正在运行的真实代码瞬间定位“代码没生效”的问题。2.方法耗时排查接口慢、函数卡顿场景接口 RT 高但不知道哪一步慢想监控某个方法的入参、出参、异常、耗时命令# 监控方法执行耗时、入参、返回值、异常watchcom.example.service.UserService getUserById{params,returnObj,throwExp,cost}# 查看方法调用链路、每一步耗时trace com.example.service.UserService getUserById价值1 分钟定位性能瓶颈不用加日志、不用改代码。3.热更新代码线上紧急修复场景线上有个小 Bug空指针、判断错误不想重启服务临时修复逻辑验证是否正确命令# 1. 反编译保存源码jad --source-only com.example.service.UserService/tmp/UserService.java# 2. 编辑修改vim/tmp/UserService.java# 3. 热加载替换mc/tmp/UserService.java-d/tmp redefine /tmp/com/example/service/UserService.class价值不重启服务在线修复 Bug适合生产紧急场景。4.排查方法没有执行/不生效场景接口调用了但方法没进去条件分支没走AOP/拦截器没生效命令# 监听方法是否被调用monitor com.example.service.UserService getUserById# 追踪方法调用堆栈stack com.example.service.UserService getUserById价值快速确认方法到底有没有被调用、谁调用的、为什么没执行。5.查看 Spring Bean / 配置信息场景想知道 Spring 容器里某个 Bean 是否存在查看 Bean 的属性值如配置、地址、开关命令# 查看 Spring BeanspringBean list# 查看某个 Bean 的属性getstatic com.example.service.UserService userMapper价值不用加日志直接在线查看 Bean 状态。6.JVM 问题排查内存、线程、GC场景CPU 占用高线程死锁频繁 GC、OOM 前排查命令# 查看 JVM 概览dashboard# 查看线程死锁、CPU 高占用thread thread-b# 查死锁thread-n3# 查 CPU 最高的 3 个线程# 查看 GC 情况gc价值生产环境 JVM 问题一键定位比 jstack/jstat 好用太多。7.类冲突、Jar 包冲突场景NoSuchMethodErrorClassNotFoundException多个 Jar 包版本冲突命令# 查看类是从哪个 Jar 加载的sc-dcom.example.service.UserService# 排查类冲突classloader-l价值快速定位JVM 加载的是哪个 Jar 包的类。8.在线调试查看入参、返回值、异常场景线上报错但日志没打全想看到真实入参、返回值、异常堆栈命令# 最常用参数 返回值 异常 耗时watchcom.example.service.UserService *{params, returnObj, throwExp}-x2价值不用加日志实时看到方法完整调用信息。总结什么时候该用 Arthas只要你遇到下面这些情况直接上 Arthas代码和线上不一致接口慢、方法耗时高方法不执行、不生效生产需要紧急热修复CPU/GC/线程异常Jar 包冲突、类加载问题想看实时入参、出参、异常一句话记住Arthas 生产环境 Java 问题在线诊断神器无需重启、无需日志、无需发布在线定位一切问题。