如何分析Spring Boot Admin获取的无法正常打开的堆转储文件?
解决Spring Boot Admin获取的堆转储无法打开的问题
问题根源
Spring Boot Admin通过Actuator的/heapdump端点获取堆转储后,会自动对文件进行gzip压缩,这就是你拿到的50MB文件远小于直接从Actuator获取的180MB文件的原因。分析工具(Eclipse Memory Analyzer/VisualVM)无法直接解析压缩后的堆转储,才会抛出压缩引用相关的错误。
解决步骤
1. 解压堆转储文件
Spring Boot Admin导出的堆转储默认是gzip压缩格式,即使文件没有.gz后缀,也可以按以下方式解压:
- 图形化工具:用7-Zip、WinRAR等工具直接打开并提取文件,得到后缀为
.hprof的完整堆转储。 - 命令行(Linux/macOS):若文件名为
heapdump,先重命名为heapdump.hprof.gz,再执行:gzip -d heapdump.hprof.gz
解压后的文件大小会和直接从Actuator获取的接近,此时再用分析工具打开即可正常解析。
2. 验证JVM兼容性(可选)
如果解压后仍报错,检查生产环境与本地分析工具的JVM配置:
- 确保本地使用64位JVM(生产环境Spring Boot应用基本都是64位,且默认启用Compressed Oops)。
- 尽量保持JVM大版本一致(比如同是OpenJDK 11或17),避免因内存模型差异导致解析失败。
3. 直接从Actuator获取堆转储
若不想处理压缩文件,可直接调用生产环境的Actuator端点获取未压缩的堆转储:
- 先确认生产环境配置中开启了heapdump端点并开放访问:
management: endpoints: web: exposure: include: heapdump endpoint: heapdump: enabled: true - 通过HTTP请求下载:
替换curl -X GET http://<生产环境地址>/actuator/heapdump -o heapdump.hprof<生产环境地址>为实际应用地址,若有认证需携带对应token或账号密码。
报错说明
你遇到的Detected compressed references, because with uncompressed 64-bit references the array at 0x60397eca8 would overlap the array at 0x60397ec90错误,本质是分析工具解析不完整的压缩文件时,内存地址计算出现冲突。解压后文件完整,该问题会自动消失。
内容的提问来源于stack exchange,提问作者Iman Ahrari
相关产品推荐
相关产品推荐

