写点什么

JAVA Heap Dump 采集最佳实践

作者:观测云
  • 2025-11-12
    上海
  • 本文字数:1153 字

    阅读完需:约 4 分钟

JAVA Heap Dump 采集最佳实践

JAVA dump 堪称 JVM 运行时的“高清 CT 影像”:其中 heap dump 以二进制 hprof 格式完整记录堆内每一个存活对象、类加载器及错综复杂的引用链,借助 retained size 计算可精准量化内存泄漏源头;thread dump 则瞬间捕获全部 JAVA 线程的调用栈、锁竞争、等待队列与 CPU 使用快照,一眼即可识别死锁、线程池耗尽或慢调用瓶颈。


观测云在此基础上进一步“把望远镜送进机房”:通过中心式 Agent 向任意 IP/端口上的目标 JVM 下发加密指令,一键触发 jmap 内置命令,本地生成标准 hprof 格式 dump 后,立即调用内嵌 OSS SDK 以流式分片上传,文件不落本地磁盘、不暴露 AccessKey,上传完毕自动回传元数据与 SHA256 摘要到观测云控制台,完成“一键拍照、云端阅片”的闭环,让曾经高门槛的 JVM 级诊断变成随取随用的 SaaS 能力。


通过观测云平台,能把传统“登录机器→手动 jmap→scp 下载→本地 MAT/VisualVM 分析”这一动辄数小时的繁琐流程,压缩到 30 秒内完成,真正实现“现场冻结、秒级取证”。

实践

当前最佳实践是基于 Kubernetes 环境,通过观测云平台一键生成 JAVA dump 信息并上报至 AWS S3 。

前置条件

  • 已注册观测云帐号

  • Kubernetes 环境已集成 DataKit

  • 拥有可写入 AWS S3 桶权限的 AK/SK

  • DataKit 版本≥1.83.0

创建 S3 桶

S3 桶用于存储 dump 文件。


DataKit 开启 dump 文件存储

调整 datakit.yaml,新增以下内容,填写 aws 相关配置。调整完成后,重新执行 apply 操作。


        - name: ENV_REMOTE_JOB_ENABLE          value: 'true'        - name: ENV_REMOTE_JOB_ENVS          value: >-                REMOTE=aws,AWS_DEFAULT_REGION=cn-northwest-1,AWS_ACCESS_KEY_ID=xxxxxxx,AWS_SECRET_ACCESS_KEY=xxxxxx,AWS_BUCKET_NAME=java-dump        - name: ENV_REMOTE_JOB_INTERVAL          value: 100s
复制代码



其他云厂商存储参考文档 https://docs.guance.com/datakit/datakit-conf/#remote-job

创建任务

登录观测云平台,应用性能监测 - 服务 - 服务清单,选择对应的 java 服务,点击创建内存快照按钮进行创建。


内存快照需要找到对应的目标方可创建。



点击历史快照按钮,可以查看创建的历史记录及快照状态、日志信息。



快照执行日志详情。


验证 S3 是否存储成功

登录 S3 控制台查看是否有对应的文件生成。


验证快照文件是否可用

从 S3 下载快照后,在本地尝试解析。


可以使用 jhat 命令解析 dump 文件,并用浏览器直接查看,格式 jhat <dump-file-name>



浏览器访问 7000 端口。


F&Q

服务清单找不到对应的服务

服务清单数据是基于链路信息按照每小时一次进行构建的,页面上会展示上次更新的时间,所以需要先有链路访问才会有对应的服务。

有服务,但找不到执行目标

如果一个服务长期没有链路,比如一天都没有链路,则不会有执行目标,需要进行业务访问对应服务产生链路后才会看到执行目标。



用户头像

观测云

关注

还未添加个人签名 2021-02-08 加入

云时代的系统可观测平台

评论

发布
暂无评论
JAVA Heap Dump 采集最佳实践_Java_观测云_InfoQ写作社区