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

如何使用Arthas进行内存分析?

Arthas 内存分析完整教程(生产可用)

Arthas 可以不重启、不停服,直接排查 Java 内存问题:内存飙高、内存泄漏、OOM、对象过多、GC 频繁等。

我给你整理最实用、最常用的内存分析命令,直接复制就能用。


一、先看整体内存状况(dashboard)

第一步永远是看全局内存、GC、堆使用情况。

bash

运行

dashboard

重点看这几列:

  • HEAP:堆内存使用(伊甸区、幸存者区、老年代)
  • NOHEAP:元空间 / 非堆内存
  • GC:GC 次数、GC 耗时(GC 飙高 = 内存有问题)

q/Ctrl+C退出。


二、导出堆快照(最关键!)

要定位内存泄漏、大对象、谁占内存,必须导出堆快照(hprof 文件)。

命令

bash

运行

heapdump

推荐(只导出存活对象,文件更小)

bash

运行

heapdump --live /tmp/myheap.hprof

导出后,用以下工具分析:

  • JProfiler
  • Eclipse MAT(免费)
  • IDEA 自带 Profiler

三、查看 JVM 内存详细配置(jvm)

bash

运行

jvm

能看到:

  • 堆最大 / 最小内存
  • 伊甸区:幸存者区比例
  • 垃圾收集器(G1/ZGC/CMS)
  • 直接内存、元空间大小

四、查看类的实例数量 & 占用内存(最实用!)

1. 按对象占用内存倒序(排障神器)

bash

运行

dashboard -i 1000 -n 1

Memory区域,会显示:

  • 占用内存最大的类
  • 实例数量
  • 字节数

2. 精确查看某个类的实例数

bash

运行

sc -d com.example.User # 先确认类已加载

bash

运行

getstatic com.example.User instanceCount

3. 查看所有类的实例数 & 内存(按大小排序)

bash

运行

classloader -a

bash

运行

ognl '@java.lang.management.ManagementFactory@getMemoryMXBean().getHeapMemoryUsage()'

五、查看对象具体内容(排查大对象)

如果你发现某个类实例超多,想看里面存了什么数据

bash

运行

vmtool -a -f com.example.User

会打印出内存中所有 User 对象的内容。

如果只想看10 个

bash

运行

vmtool -a -n 10 -f com.example.User

六、排查 GC 频繁 / 内存飙高套路(生产标准流程)

步骤 1:看整体

bash

运行

dashboard

HEAP 使用率、GC 次数是否疯狂上涨

步骤 2:导出堆快照

bash

运行

heapdump --live /tmp/heap.hprof

步骤 3:看哪些类实例最多

bash

运行

vmtool --action getInstances --className java.util.ArrayList --limit 10

步骤 4:看 GC 详情

bash

运行

gc -i 1000

每 1 秒打印一次 GC 情况。


七、快速判断是否内存泄漏

满足以下特征 = 90% 内存泄漏:

  1. 堆内存持续上涨,不会回落
  2. FullGC 后内存下降很少
  3. 某个业务类实例数越来越多,不释放
  4. 项目运行时间越久,内存越高

处理方法:

  1. heapdump导出快照
  2. 用 MAT/JProfiler 查看GC Roots
  3. 定位:谁持有了这个对象,导致无法回收

八、最常用内存命令汇总

bash

运行

dashboard # 全局内存+GC看板 heapdump # 导出堆快照(排查泄漏必备) jvm # 查看JVM内存配置 gc # 实时GC监控 vmtool -a -f 类名 # 查看内存中的对象实例 sc -d 类名 # 查看类是否被加载

总结

  • dashboard:看整体内存与 GC
  • heapdump:定位内存泄漏的核心
  • vmtool:查看类实例与内容
  • gc:监控 GC 是否异常
http://www.jsqmd.com/news/799606/

相关文章:

  • Zotero茉莉花插件:3大功能轻松管理中文文献,科研效率翻倍提升
  • i.MX 6UL/6ULL开发环境配置与驱动开发实战
  • VS Code主题设计:ini Theme如何通过认知减负提升编码效率
  • Arduino Uno R3 bootloader烧写避坑全记录:从USBasp驱动安装到熔丝位设置(Win10/11实测)
  • 图解人工智能(8)图灵测试作为智能与否的标准
  • 别再混淆了!一文搞懂USB HID描述符、报告描述符和物理描述符的区别与联系
  • 生成引擎优化(GEO)与内容创作融合提升用户体验的实施策略
  • 基于MCP协议构建统一AI编程助手:OpenWork v12架构与实战
  • 惠普tank 2606,开机提示错误代码 er-08 ,加了粉还是报错er08,黄灯闪烁成像鼓接近寿命期限报错,怎么办?
  • 3PEAK思瑞浦 TP2262-SR SOP8 运算放大器
  • 全方位降本增效,Captain AI重构OZON运营成本结构
  • Arm嵌入式多线程编程:原理、实践与优化
  • LDO电源设计:低噪声、高PSRR与系统可靠性的工程实践
  • Gemini3.1Pro推理能力深度解析
  • 碳化硅器件在PFC电路中的优势与应用
  • LLM应用架构实战:从Prompt工程到AI-Agent工作流设计
  • 暖心指南|心理干预案例分享关键点!
  • 别再花钱买Aseprite了!手把手教你用Visual Studio 2019和CMake免费编译最新版(Windows 10/11保姆级教程)
  • Glide-in-Place技术:VR足部压力感应运动控制解析
  • SQL Server、MySQL、Oracle 核心区别对比
  • 深之蓝冲刺科创板:年营收3.55亿,扣非后净亏5689万 顺为是股东
  • 如何让经典DirectX游戏在现代Windows上完美运行:DDrawCompat终极兼容解决方案
  • Nuendo 4.3 死活没声音?别急着换电脑,先检查这三个声卡驱动设置(附F4快捷键用法)
  • Wintel联盟裂变启示录:从通用计算到场景化计算的技术路径抉择
  • 从标注到训练:用Labelme+Anaconda搞定YOLO/PyTorch数据集的全流程实战
  • ExDark数据集:暗光视觉研究的完整实战指南
  • DDrawCompat完整指南:5个步骤让Windows 11上的老游戏完美运行
  • 隐私保护机器学习:FHE与MPC技术对比与工程实践
  • CTF新手必看:Misc压缩包题型的5种实战解法(附工具和脚本)
  • 2026-05-12:最大的偶数。用go语言,给定一个只由字符 ‘1‘ 和 ‘2‘ 组成的字符串 s。 你可以从中任意删除一些字符,但剩下的字符的相对顺序必须保持不变。 你需要从所有可能的“删除后字符