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 操作。

yaml 复制代码
        - 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

其他云厂商存储参考文档 docs.guance.com/datakit/dat...

创建任务

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

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

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

快照执行日志详情。

验证 S3 是否存储成功

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

验证快照文件是否可用

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

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

浏览器访问 7000 端口。

F&Q

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

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

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

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

相关推荐
计算机学姐2 小时前
基于SpringBoot的旅游系统的设计与实现
java·vue.js·spring boot·后端·spring·java-ee·旅游
卷心菜的学习路2 小时前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
java·spring boot·后端
秋饼2 小时前
Spring AI AgentCore SDK 企业级实战:@AgentCoreInvocation 一注解替代 3000 行 Runtime 契约
java·ai·技术分享·后端开发
Yyyyyy~2 小时前
【java】运算符
java
古法安卓2 小时前
Android-切换白天黑夜内存不足问题排查
android·java·android studio
Dreams_l2 小时前
如何保证RabbitMQ消息可靠传输
java·rabbitmq·java-rabbitmq
MacroZheng2 小时前
面试官皱眉:"你懂 Vibe Coding,那你说superpowers和grill-me怎么选?",我:"小孩才做选择,我全都要!"
java·人工智能·后端
大模型码小白2 小时前
【AI大模型】DeepSeek Harness 深度解析:大模型评测框架的架构与实践
java·运维·人工智能·spring·架构·自动化
Mr.Java.2 小时前
本地测试全绿,上线 SQL 报错?Spring Boot 容器级 DT 测试实战指南(附Skills)
java·测试用例·springboot·testcontainers·dt·java测试skills·dt测试
维天说3 小时前
Agent会听人话,反而更难管
java·开发语言·人工智能