/spark heapdump

基本信息

属性 值
命令名 heapdump
别名 无
来源 HeapAnalysisModule.heapDump(HeapAnalysisModule.java:68)
参数 --compress <type>、--run-gc-before、--include-non-live
Tab 补全 TabCompleter.completeForOpts(arguments, "--compress", "--run-gc-before", "--include-non-live")

生成完整的 JVM 堆快照(.hprof)。这是 spark 中唯一会长时间阻塞且可能显著影响服务器性能的操作。

功能

执行顺序(HeapAnalysisModule.heapDump):

  1. 先确定文件路径:platform.resolveSaveFile("heap", HeapDump.isOpenJ9() ? "phd" : "hprof")
    • 扩展名按 JVM 实现分支:OpenJ9 用 .phd,其余(含 HotSpot)用 .hprof
  2. liveOnly = !arguments.boolFlag("include-non-live") —— 默认只导出存活对象,加 --include-non-live 才包含已死未回收的对象
  3. 若传 --run-gc-before:广播「Running garbage collector…」并 System.gc()
  4. 广播「Creating a new heap dump, please wait…」,调用 HeapDump.dumpHeap(file, liveOnly);异常时广播「An error occurred whilst creating a new heap dump.」(红色)并返回
  5. 成功则广播「Heap dump written to: <绝对路径>」,并记入活动日志(Activity.fileActivity)
  6. 若传了 --compress,再执行压缩

heapdump 不做网络上传,与 profiler / heapsummary 的默认行为相反:产物只落在本地磁盘。

压缩

--compress <type> 的取值来自 Compression 枚举,用 valueOf(upperCase) 解析,解析失败会被静默忽略(catch (IllegalArgumentException e) { // ignore }),即拼错类型不会报错,只是不压缩。

类型 输出扩展名 实现
GZIP .gz Compression.GZIP,GZIPOutputStream 缓冲区 64 KiB(1024 * 64)

XZ 压缩在本版本中被注释掉了(Compression.java:46-51 以 // XZ { 开头),源码中无 XZ 枚举常量 —— 传 --compress xz 会被静默忽略。

压缩过程有进度回报:progressHandler 每当距上次回报超过 5 秒,就异步广播「Compressed <已压> / <总量> so far… (<百分比>)」。

完成后广播压缩比摘要与新文件路径:「Compression complete: <原大小> --> <压缩后> (<百分比>)」及「Compressed heap dump written to: <路径>」。

数值

数值名 值 来源
默认导出范围 仅存活对象(liveOnly = true) HeapAnalysisModule.heapDump
扩展名(HotSpot) hprof HeapDump.isOpenJ9() ? "phd" : "hprof"
扩展名(OpenJ9) phd 同上
压缩类型 仅 GZIP 有效 Compression 枚举
GZIP 缓冲区 64 KiB Compression.GZIP(1024 * 64)
压缩进度回报间隔 5 秒 heapDumpCompress 内 TimeUnit.SECONDS.toMillis(5)
文件名时间戳格式 yyyy-MM-dd_HH.mm.ss SparkPlatform.DATE_TIME_FORMATTER

交互

触发 行为
不带 flag 写 <config>/spark/heap-<时间戳>.hprof
--include-non-live 导出含死对象,文件更大
--run-gc-before 先 System.gc(),可减小输出体积
--compress gzip 额外产出 .gz 文件
--compress <拼错的类型> 静默忽略,仅产出未压缩的 dump
在 OpenJ9 上运行 扩展名为 .phd 而非 .hprof

相关条目