使用--heap-size-hint后Julia脚本在HPC集群报错求助
Julia在HPC集群使用
--heap-size-hint时触发终止信号的问题分析 问题描述
- 我是Julia新手,首次提问。在HPC集群运行Julia脚本时,使用
--heap-size-hint参数限制内存为54GB(作业已分配60GB),触发终止信号错误;不加该参数时脚本运行正常,错误指向代码第8行的let-end块。
错误日志如下:
398188] signal (15): Terminated in expression starting at /user1/jay.pandey/start_again_copy/start_again/dup_for_check/writing_to_disk.jl:8 _ZNK4llvm19TargetTransformInfo22getArithmeticInstrCostEjPNS_4TypeENS0_14TargetCostKindENS0_16OperandValueKindES4_NS0_22OperandValuePropertiesES5_NS_8ArrayRefIPKNS_5ValueEEEPKNS_11 InstructionE at /user1/jay.pandey/julia-1.9.0/bin/../lib/julia/libLLVM-14jl.so (unknown line) unknown function (ip: 0x4cd832f) unknown function (ip: (nil)) Allocations: 66045750 (Pool: 65995465; Big: 50285); GC: 115
可能的原因
集群OOM Killer触发终止
信号15通常是集群管理系统发送的终止信号,而非Julia自身抛出。--heap-size-hint是给Julia GC的软提示,并非硬限制。当let块内进行大量内存分配时,实际内存占用可能短暂接近或超过集群分配的60GB阈值(哪怕你设置了54GB的提示),触发集群的内存超限终止机制。Julia 1.9版本GC对内存提示的处理缺陷
Julia 1.9的GC在处理--heap-size-hint时可能存在优化不足,当内存压力达到提示阈值时,GC无法及时完成内存回收,导致内存占用持续攀升,触发集群的监控终止。let块内的内存累积问题
let块会创建独立作用域,若块内存在未及时释放的大对象(比如未清空的数组、未关闭的资源),结合内存限制提示,会加速内存占用触顶,增加触发终止的概率。集群内存监控的采样间隙问题
部分HPC集群的内存监控是周期性采样,可能在Julia GC尚未完成回收的间隙,采样到的内存占用超过分配额度,直接发送终止信号,忽略了Julia的内存提示设置。
排查建议
- 检查let块内代码,确认是否有不必要的大对象创建,可手动调用
GC.gc()或使用empty!提前释放变量。 - 调整
--heap-size-hint的值,比如设置为50GB(比分配的60GB留更大缓冲),验证是否还会触发错误。 - 升级Julia到1.10及以上版本,新版本对GC和内存管理有针对性优化,可能修复此类问题。
- 联系集群管理员,确认是否是集群OOM Killer触发的终止,以及集群的内存监控策略细节。
内容的提问来源于stack exchange,提问作者moonshine
相关产品推荐
相关产品推荐

