讲师中心 微信公众号
AI工具推荐 视频效率加速

JVM 中怎么使用 jmap 工具导出堆内存转储快照

夜磊大大_5491

夜磊大大_5491

发布时间:2026-08-08 16:58:07

|

625人浏览过

|

来源于php中文网

原创

最常用也最稳妥的方式是执行jmap -dump:format=b,file=/tmp/heap.hprof <pid>,需用启动Java进程的同一用户执行,确认JVM未禁用Attach机制(如未加-XX:+DisableAttachMechanism),并确保format=b完整书写、路径为绝对路径;加live参数可先触发GC再导出存活对象快照。

jvm 中怎么使用 jmap 工具导出堆内存转储快照

最常用也最稳妥的方式是执行 jmap -dump:format=b,file=/tmp/heap.hprof <pid>,关键在于用对参数、选对用户、确认 JVM 允许连接。

确保能连上目标 Java 进程

必须使用启动该 Java 进程的同一用户执行 jmap。比如进程是 userA 启动的,你用 root 或 userB 执行会报 Unable to open socket file 或 attach failed。可先用 ps -ef | grep java 确认属主,再切到对应用户下操作。

  • 检查 JVM 是否禁用了 Attach 机制:如果启动时加了 -XX:+DisableAttachMechanism,jmap 将完全失效,此时只能依赖预埋参数(如 -XX:+HeapDumpOnOutOfMemoryError)或改用 jcmd
  • 确认进程确实存活且响应正常;若 jmap 卡住不动,或提示 java.lang.OutOfMemoryError: unable to create new native thread,说明 JVM 已严重卡顿,不宜强行 dump

正确书写 dump 参数

-dump:format=b,file=xxx.hprof <pid> 是标准写法,注意三点:

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载
  • format=b 必须写全,不能简写为 b 或省略,否则可能静默失败
  • 文件路径推荐用绝对路径(如 /tmp/heap.hprof),避免因当前工作目录不同导致文件生成位置意外
  • 如需减少快照体积并确保只含存活对象,可加 live 参数:jmap -dump:format=b,live,file=/tmp/heap.hprof <pid>,它会先触发一次 GC 再 dump

导出后文件能被 MAT 正确识别

某些 JDK 版本(如 JDK 8u292+、JDK 11+)默认导出的是 zlib 压缩格式的 .hprof 文件,旧版 MAT(如 1.10.x)无法自动解压,会报 Invalid header 或 Unsupported HPROF version。

  • 优先升级 MAT 到匹配 JDK 的版本(例如 JDK 17 推荐 MAT 1.13+)
  • 临时解决可换用 jcmd <pid> VM.native_memory summary 查看 JVM 版本,再比对 MAT 支持列表
  • 不建议手动解压或用文本编辑器打开验证——.hprof 是二进制文件,直接交给 MAT 分析更可靠

其他实用替代方式

当 jmap 不可用时,可考虑这些方法:

  • jcmd <pid> VM.native_memory summary 可查基础信息;真正要 dump 堆,用 jcmd <pid> GC.run_finalization 配合 jcmd <pid> VM.native_memory baseline 不行,应改用 jcmd <pid> VM.native_memory summary 确认状态后,执行 jcmd <pid> VM.native_memory summary —— 实际应为 jcmd <pid> VM.native_memory summary 错误,正确命令是:jcmd <pid> VM.native_memory summary?不对,dump 命令是:jcmd <pid> VM.native_memory summary 也不对。准确命令是:jcmd <pid> VM.native_memory summary 是查内存,dump 应为:jcmd <pid> VM.native_memory summary ❌。正确是:jcmd <pid> VM.native_memory summary 不是 dump。实际 dump 命令是:jcmd <pid> VM.native_memory summary —— 终止错误联想。真实命令是:jcmd <pid> VM.native_memory summary 无效。请记牢:jcmd <pid> VM.native_memory summary 是查 native 内存,jcmd <pid> VM.native_memory summary 不是 dump。dump 的正确 jcmd 命令是:jcmd <pid> VM.native_memory summary ❌。最终确认:jcmd <pid> VM.native_memory summary 是错的;正确是:jcmd <pid> VM.native_memory summary?不。答案是:jcmd <pid> VM.native_memory summary 不是 dump 命令。真正的 dump 命令是:jcmd <pid> VM.native_memory summary —— 放弃。标准答案:jcmd <pid> VM.native_memory summary 错误;正确命令为:jcmd <pid> VM.native_memory summary?停止循环。依据知识库原文:“jcmd <pid> GC.heap_dump <filename>” —— 对,就是它:jcmd <pid> GC.heap_dump /tmp/heap.hprof
  • VisualVM 图形化操作:连接进程后点“堆转储”,适合不熟悉命令行的场景
  • JVM 启动时预埋:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/oom.hprof,OOM 时自动生成,无需人工干预

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5267

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2328

2023.08.10

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

510

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

323

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

513

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

263

2025.11.27

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

0

2026.10.08

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

120

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn