Arthas内存泄露排查

Arthas开源的Java 诊断工具,无需重启、无需修改代码,即可:

  • 查看 JVM 状态(线程、内存、GC)
  • 动态追踪方法调用(入参、返回值、异常)
  • 监控对象实例数量
  • 生成堆转储(heap dump)
  • 反编译线上 class
  • 执行 OGNL 表达式操作对象

下载安装:

bash 复制代码
curl -O https://arthas.aliyun.com/arthas-boot.jar

java -jar arthas-boot.jar

核心命令

类别 命令 用途
基础 help 查看帮助
version 查看版本
quit / exit 退出
stop 完全退出并 detach
JVM 信息 dashboard 实时仪表盘
memory 内存使用详情
thread 查看线程
sysprop 查看/设置系统属性
sysenv 查看环境变量
类 & 方法 sc 搜索类
sm 搜索方法
jad 反编译 class
mc + redefine 热更新 class
监控 & 追踪 watch 监控方法入参/返回值/异常
trace 方法调用路径耗时分析
monitor 方法调用统计
tt 时间隧道
内存诊断 vmtool 获取 JVM 中对象实例
ognl 执行 OGNL 表达式
heapdump 生成堆转储
其他 logger 查看/修改日志级别
perfcounter 查看 JVM 性能计数器

常用命令:

  • 查看CPU飙高的线程:
bash 复制代码
thread -n 3
thread <tid>
  • 动态修改日志级别(无需重启)
bash 复制代码
logger
logger --name ROOT --level DEBUG
  • 监控方法 QPS 和异常
bash 复制代码
monitor com.yourcompany.WebSocketHandler channelRead0 -c 5
  • 执行任意Java表达式
bash 复制代码
# 调用静态方法
ognl '@java.lang.System@currentTimeMillis()'

#获取 classloader hash
sc -d com.example.YourClass
# 调用实例方法
ognl -c 18b4aac2 '@com.example.Cache@getInstance().size()'

下面以排查WebSocket堆外内存泄露问题举例:

经排查,怀疑 是WebSocket 消息未释放导致内存增长。

  1. 确认类是否存在

sc io.netty.handler.codec.http.websocketx.TextWebSocketFrame

  1. 查看当前存活实例数

vmtool --action getInstances --className io.netty.handler.codec.http.websocketx.TextWebSocketFrame --limit 1000 | wc -l

  1. 查看实例内容

​vmtool --action getInstances --className io.netty.handler.codec.http.websocketx.TextWebSocketFrame --limit 1 --express 'instances0.text()'

  1. 追踪其创建对象

watch io.netty.handler.codec.http.websocketx.TextWebSocketFrame <init> '{params, returnObj}' -x 3

  1. 检查 Netty Direct Memory 使用

ognl '@io.netty.buffer.PooledByteBufAllocator@DEFAULT.metric().usedDirectMemory()'

  1. 生成 heap dump(用于 MAT 分析)

heapdump /tmp/websocket-leak.hprof

相关推荐
一路向北North2 分钟前
Spring Security OAuth2.0(18):资源服务测试
java·后端·spring
用户990450177800920 分钟前
若依工作流主流方案对接
后端
触底反弹35 分钟前
🚀 Node.js path 和 fs 模块,从回调地狱到 async/await 的进化之路!
javascript·后端·node.js
极光代码工作室1 小时前
基于SpringBoot的订单管理系统
java·springboot·web开发·后端开发
xiaoduzi19911 小时前
ConcurrentHashMap学习
java·学习
折哥的程序人生 · 物流技术专研1 小时前
《Java 100 天进阶之路》第53篇:volatile与JMM(2026版)
java·volatile·内存屏障·可见性·java内存模型·jmm·java100天进阶
米饭不加菜1 小时前
使用万用表判断三极管(BJT)好坏
java·开发语言
Csvn1 小时前
Python 开发技巧 · 生成器(Generator)进阶 —— 从 yield 到 yield from,写出省内存的生产者-消费者模式
后端·python
geovindu1 小时前
CSharp: Dijkstra Algorithms
开发语言·后端·算法·c#
Maynor9961 小时前
AI Coding 零基础实战教程|第五部分:完整项目案例实操
java·前端·人工智能·claude code·ai coding