You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure Pipeline运行时捕获Heap Dump排查Java内存溢出问题

在Azure Pipeline中捕获Java堆转储的方法

方法1:通过JVM启动参数自动生成堆转储

在Java应用的启动命令中添加JVM参数,让JVM在触发OutOfMemoryError时自动生成堆转储文件:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$(Pipeline.Workspace)/heapdump.hprof
  • 参数说明:-XX:+HeapDumpOnOutOfMemoryError开启OOM自动转储功能,-XX:HeapDumpPath指定转储文件的保存路径(这里用Pipeline工作目录,方便后续获取)。
  • 实际配置示例:如果是Maven任务,可在Goals and options中追加参数:
clean install -Xmx4g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$(Pipeline.Workspace)/heapdump.hprof

方法2:手动触发堆转储(适用于非即时OOM场景)

如果OOM不是立即触发,可手动执行命令生成堆转储:

  1. 在Pipeline代理机器上,用以下命令获取Java进程的PID:
jps -l
  1. 使用jmap命令生成堆转储:
jmap -dump:format=b,file=$(Pipeline.Workspace)/heapdump_manual.hprof <进程PID>
  • 注意:托管代理需确保预装JDK(包含jmap工具),或使用自定义代理环境。

方法3:保留堆转储文件以便分析

生成堆转储后,需通过Pipeline任务保留文件:
添加Publish Build Artifacts任务,将$(Pipeline.Workspace)/heapdump*.hprof设为要发布的文件路径,发布到Pipeline artifacts中,这样就能在运行结束后下载堆转储文件。

后续分析建议

拿到堆转储文件后,可通过以下方式分析:

  • 使用JDK自带工具jhat:执行jhat heapdump.hprof,然后访问本地端口查看分析结果。
  • 使用Eclipse Memory Analyzer (MAT):打开堆转储文件后,通过Leak Suspects报告定位内存泄漏点,比如是否存在大量未回收的HashMap实例,或HashMap存储了过量数据。

内容的提问来源于stack exchange,提问作者SeleniumUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 05:36:01