当前位置: 首页 > news >正文

Arthas JVM 性能排查

一、官方资源

  • 官网
  • IDEA 插件支持命令生成,提高排查效率。
  • 官方文档包含完整命令说明、示例与在线教程。

二、常用命令分类

在这里插入图片描述

1. 类相关命令

命令功能说明
getstatic查看类静态属性,可结合 ognl 遍历复杂对象
jad反编译已加载类源码,可指定 ClassLoader 和方法
retransform加载外部 .class 替换已加载类,支持查看和删除 entry
redefine动态替换类方法字节码

2. 监测排查命令

命令功能说明
monitor方法调用监控(次数、耗时、异常)
stack查看方法调用路径
thread查看线程堆栈和状态,支持阻塞线程分析
trace方法内部调用路径及耗时分析
tt时空隧道,记录方法入参和返回值
watch方法执行数据观测,支持 -b/-e/-s/-f 四个事件

3. JVM 相关命令

命令功能说明
heapdump生成堆转储文件,用于 MAT/VisualVM 分析
jfrJava Flight Recorder,低开销采集诊断数据
memory查看 JVM 内存使用情况
dashboard实时系统监控
classloader查看 ClassLoader 及继承树
logger查看及更新 Logger
sc查看已加载类信息
mbean查看 MBean 属性及监控
profiler生成火焰图分析热点方法
vmoption查看及更新 VM 参数
vmtool查询对象实例、强制 GC、线程操作

4. 特殊与辅助命令

命令功能说明
ognl执行 OGNL 表达式,灵活访问对象属性
options设置全局开关(如 JSON 输出、unsafe 模式等)
help查看命令帮助
history命令历史
cls清屏
quit退出连接
stop完全退出 Arthas
reset重置增强类

三、OGNL 表达式常用语法

  • 访问静态属性@全路径类@静态属性
  • 调用静态方法@全路径类@方法("参数")
  • 条件过滤params[0].{? #this.name != null}
  • 构造对象new com.Test("xiaoming", 18)
  • 临时变量#var=@com.Test@getPerson("xiaoming",18)

💡 Tips:结合 grep 使用命令过滤结果,例如:

classloader -a | grep "String"

四、JVM 垃圾收集与调优

1. 核心概念

  • 分配速率 (Allocation Rate):新生代对象分配速度,单位 MB/s
  • 提升速率 (Promotion Rate):新生代对象晋升到老年代的速度,单位 MB/s
  • 调优目标:短命对象在新生代回收,长寿对象晋升到老年代,避免频繁 GC 或 OOM。

2. 新生代调优

  • 计算公式
Allocation Rate = (本轮GC前使用容量 - 上轮GC后容量) / 时间差
  • 高分配速率 → GC 频繁 → 吞吐量下降
  • 调优策略:减少对象创建,或增大新生代堆空间

3. 老年代调优

  • 计算公式
Promotion Rate = (新生代减少量 - 整堆减少量) / 时间差
  • 高提升速率原因:内存泄漏、大对象频繁分配、高并发流量冲击
  • 调优策略:延迟晋升,保持对象在新生代多轮 GC 后再进入老年代

4. 堆空间分配建议

  • 新生代适当增大,减少 Minor GC
  • 老年代保持足够空间,避免 Full GC
  • 根据活跃数据量合理分配各区域大小

5. GC 流程示意

新生代 (Eden + Survivor)┌─────────┐│ Eden区   │ ← 高分配速率,新对象优先分配├─────────┤│ Survivor │ ← 新生代对象存活若干轮 GC 后晋升└─────────┘││ 晋升 (Promotion)▼
老年代 (Tenured)┌─────────┐│ 老年代   │ ← 对象长寿命存储区,Full GC 触发└─────────┘GC 流程:
[Minor GC] → 清理 Eden & Survivor → 存活对象晋升到老年代
[Major/Full GC] → 清理老年代

五、Arthas 命令速查表(场景化)

场景/目标常用命令使用建议与说明
JVM 基本信息dashboardCPU、内存、线程、GC 全景
vm查看 JVM 内存、GC、类信息
线程排查thread查看线程状态及堆栈
thread -n 3CPU 占用前 3 的线程堆栈
方法耗时分析monitor -c 3 类名 方法名监控方法执行耗时及调用次数
trace 类名 方法名方法调用链追踪
热点方法 & CPU 分析tt 类名 方法名采样 CPU 占用,定位热点方法
内存泄漏排查heapdump导出堆快照分析
object 类名查看对象实例数量与大小
类信息 & ClassLoadersc查看加载的类信息
cls 关键字按关键字过滤类
AOP/动态修改redefine动态替换类方法字节码
ognl在 JVM 内执行表达式
日志 & 配置调试jad 类名反编译 class 查看源码
watch 类名 方法名方法调用前后拦截,打印参数/返回值

💡 建议排查顺序:
dashboardthreadmonitor/traceheapdump/objectognl/redefine


六、性能问题实战示例

场景:线上 CPU 突然飙高

  1. 查看 JVM 状态:

    dashboard
    
  2. 找出 CPU 占用高线程:

    thread -n 5
    
  3. 分析热点方法:

    tt -t 10 类名 方法名
    
  4. 监控方法耗时与调用次数:

    monitor 类名 方法名 -c 5
    
  5. 排查内存泄漏(如伴随内存增长):

    object 类名
    heapdump
    
  6. 临时监控参数或返回值:

    watch 类名 方法名 '{params, returnObj}' -x 3
    

http://www.dtcms.com/a/431373.html

相关文章:

  • 从静态图表到交互叙事:数据可视化的新范式与实现
  • QT肝8天07--连接数据库
  • 三合一网站建设什么意思做生存曲线的网站
  • 如何查询网站接入商校园网站建设系统设计
  • 什么是 Apache Ignite?
  • NI-9234 采集卡拆解
  • 大连建站企业wordpress打造官网
  • 深度学习基本函数
  • 题解:P11035 【MX-X3-T2】「RiOI-4」消えた夏の夢
  • 网站开发网页gif设计公司多后缀域名查询网站
  • pink老师html5+css3day01
  • MOS管简单入门笔记(主讲NMOS,PMOS不常用)
  • 温州网站建设设计公司级做宣传图的网站
  • 使用 CSS 绘制中国国旗并添加艺术字“中国万岁!”
  • 俄语企业网站制作东莞建设银行网点查询
  • 计算机网络-分组交换网中的时延、丢包和吞吐量
  • Jakarta EE 实验 — Web 聊天室(JSP版)
  • P1471 方差
  • 【开题答辩全过程】以 Puk苍白游戏论坛网为例,包含答辩的问题和答案
  • Java包装类与泛型详解
  • 举报非法网站要求做笔录昌乐网站建设
  • 个人网站作品欣赏杭州开发网站的公司哪家好
  • 12-Redis+有序集合类型实战指南:从分数排序到排行榜场景落地
  • 延时任务之Redis 过期事件监听原理与缺陷
  • Redis 扩展数据类型
  • 汕头企业网站建设设计班级网站 模板
  • 拉格朗日乘子法
  • 电商网站设计是干什么的高碑店网站建设价格
  • 网站源代码制作四大门户网站对比分析
  • 教学网站开发背景及意义怎样下载黑龙江人社app