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

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

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

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

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

相关推荐
闲猫1 小时前
Spring AI 对接Deepseek ChatModel 聊天对话
java·前端·spring
自信的未来3 小时前
JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
java·前端·json
Brookty3 小时前
【JavaEE】线程安全(一).4:写块串行保安全、CAS
java·开发语言·java-ee·多线程·线程安全
怕孤单的草丛4 小时前
缓存管理面临的主要问题
java·数据库·缓存
犀利豆6 小时前
AI in Harness(二)
java·人工智能·后端
沉静的小伙8 小时前
在微服务中使用领域事件
java·运维·微服务
程序员在囧途8 小时前
likeadmin-api API 算力超市怎么做供应商切换?统一鉴权、task_id 和 callback_url 才能稳交付
java·服务器·数据库·开放api·likeadmin-api·api算力超市
醇氧8 小时前
Spring 容器 Map 注入机制详解
java·后端·spring
ylscode8 小时前
Cloudflare Workers Cache 深度解析:边缘缓存如何重塑无服务器性能边界
java·spring·mybatis