Arthas在排查线上问题时的典型用法?

wen java案例 63

本文目录导读:

Arthas在排查线上问题时的典型用法?

  1. 快速入门:启动与基础命令
  2. 定位 CPU 高、线程阻塞等性能问题
  3. 排查接口响应慢、方法耗时瓶颈
  4. 线上问题热修复与动态修改
  5. 查看线上运行中的配置、参数、内存对象
  6. 排查异常/错误场景
  7. 分析IO、网络、锁等问题
  8. 🔥 核心用法速记口诀(实际工作引用)
  9. ⚠️ 注意事项

Arthas(阿尔萨斯)是阿里巴巴开源的Java诊断工具,主要用于线上问题的实时排查,无需修改代码或重启应用,以下是它在线上问题排查时的典型用法和场景:

快速入门:启动与基础命令

  • 启动:在目标JVM所在机器上执行 java -jar arthas-boot.jar,选择需要诊断的Java进程。
  • 常用基础命令
    • dashboard:实时查看线程、内存、GC、系统信息(类似JVM监控面板)。
    • thread:查看线程栈,定位死锁、CPU过高线程(thread -b 直接显示阻塞线程)。
    • jvm:查看JVM各项参数、类加载、编译、内存等详细状态。

定位 CPU 高、线程阻塞等性能问题

  • 场景:CPU飙高、系统卡慢、接口无响应。
  • 典型用法
    • thread:列出所有线程及其CPU占比,thread -n 5 显示最忙的5个线程。
    • thread <id>:查看具体线程的堆栈,识别热点代码。
    • thread -b:直接定位当前阻塞其他线程的线程(死锁检测利器)。
    • dashboard:观察内存、GC频率、线程数变化,判断是内存泄漏还是CPU密集型任务。

排查接口响应慢、方法耗时瓶颈

  • 场景:某个API接口偶尔超时,或整体请求变慢。
  • 典型用法
    • trace <类名> <方法名>:统计方法内部所有子调用的耗时、次数和调用链路。
      • 示例:trace com.example.service.UserService getUserInfo 可以精确看到SQL查询、RPC调用哪个环节最慢。
    • watch <类> <方法> "{params,returnObj,throwExp}" -x 2:观测方法入参、返回值、异常,并展开深度2层。
      • 示例排查返回数据异常:watch com.example.controller.OrderController getOrder "{params,returnObj}" -x 3
    • monitor/ttmonitor统计方法调用频率、成功/失败次数;tt(TimeTunnel)记录快照,可回放方法调用现场。

线上问题热修复与动态修改

  • 场景:紧急修复线上Bug,但无法立即发布版本(需谨慎,通常用于临时止血)。
  • 典型用法
    • ognl:执行任意Java表达式,动态修改静态变量、调用方法。
      • 示例:ognl '@com.example.config.GlobalConfig@TIME_OUT=5000' 动态改超时时间。
    • mc + redefine:使用 mc 将修改后的Java文件编译为class,再用 redefine 热替换线上类(注意:仅覆盖方法体,不支持新增字段/方法,有风险)。
    • vmtool:直接调用Spring Bean或任意对象的方法(如强制刷新缓存),比ognl更安全易用。

查看线上运行中的配置、参数、内存对象

  • 场景:验证配置是否正确、查看某个变量当前值、确认缓存内容。
  • 典型用法
    • sc:搜索已加载的类,sc -d *Controller查看类详细信息(来源、注解、字段)。
    • sm:查看类的方法签名(方法名、参数、返回值)。
    • heapdump:生成堆转储文件(heapdump /tmp/dump.hprof),配合MAT分析大对象。
    • vmtool --action getInstances:获取某个类的所有实例,查看其字段值(例如查看某个缓存Map的内容)。

排查异常/错误场景

  • 场景:偶发报错、业务逻辑异常、日志不完整。
  • 典型用法
    • watch 配合 -e 参数:watch com.example.service.* * "{throwExp}" -e -x 2 只捕获并打印异常。
    • stack <类名> <方法名>:打印当前方法被调用的完整调用栈,便于溯源异常路径。
    • monitor -c 5 <类> <方法>:每5秒统计一次方法调用,快速定位高错误率方法。

分析IO、网络、锁等问题

  • 场景:文件句柄泄漏、网络等待、锁竞争严重。
  • 典型用法
    • stack:结合threadtrace查看IO等待的堆栈(如java.net.SocketInputStream.read)。
    • vmtool 结合 lockInfo:查看对象持有锁的情况(Arthas 3.5+版本支持)。
    • trace 配合过滤:trace -j com.example.service.* * '#cost > 500' 只打印耗时超过500ms的调用。

🔥 核心用法速记口诀(实际工作引用)

场景 命令 说明
CPU高、死锁 thread -n 5 / thread -b 定位最忙线程、阻塞线程
慢方法捉虫 trace + 类/方法 统计子调用耗时,V1.0.0
数据异常定位 watch + -x 打印输入输出值,深度展开
临时修复配置 ognl / vmtool 改静态变量、调Spring Bean方法
内存泄漏分析 heapdump 生成dump,离线分析
查看实例状态 vmtool --action getInstances 获取任意对象,看当前内部数据

⚠️ 注意事项

  1. 生产环境慎用redefine/ognl 等动态修改命令可能引发不稳定,建议仅在严重故障时作为临时手段。
  2. 安全限制:部分命令(如heapdump)占用较多资源,高峰期需谨慎。
  3. 配合日志:Arthas擅长实时调试,但长期监控靠日志和APM(如SkyWalking)。

如果你有具体线上问题(如某个接口慢、OOM、锁等待等),可以告诉我,我可以给你具体的Arthas排查步骤。

抱歉,评论功能暂时关闭!