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

HPC集群SLURM作业中cp/rsync如何关闭RAM缓存避免OOM

解决方案

以下方案均不需要提升作业声明的RAM配额,不会在模拟运行周期内额外锁定内存资源,可直接替换原有复制命令:

  • 采用直连IO模式复制,完全绕过系统页缓存
    默认cp命令没有提供绕过页缓存的参数,可替换为dd命令搭配direct IO标志实现,全程不会将文件数据缓存到内存,单进程内存占用稳定在5MB以内。单文件复制示例:
    dd if=源文件路径 of=目标路径 bs=1M conv=fdatasync iflag=direct oflag=direct
    
    目录复制场景可配合find命令遍历执行,逻辑简单,适配所有Linux环境。
  • 使用rsync内置的丢缓存参数
    若计算节点rsync版本≥3.2.0,可直接使用--drop-cache参数,该参数会在读取每个文件块后主动通知系统释放对应页缓存,不会产生累积内存占用,且和原cp -Hpv的行为完全对齐(保留硬链接、保留文件权限属性、显示复制进度),替换成本最低:
    rsync -aHvP --drop-cache ${CONTENTS} ${TMPDIR}
    
  • 低版本环境兼容方案(无需root权限)
    若集群工具版本受限,可在复制时启动后台进程定期清理当前作业cgroup下的页缓存,SLURM集群默认会给作业所属用户开放对应cgroup路径的写权限,不需要管理员配合:
    # 启动后台清缓存进程,每2秒清理一次当前作业的页缓存
    (
    CGROUP_DROP_CACHE=$(find /sys/fs/cgroup -name "drop_caches" | grep "job_${SLURM_JOB_ID}" | head -n1)
    while true; do
      echo 1 > $CGROUP_DROP_CACHE
      sleep 2
    done
    ) &
    CACHE_CLEAN_PID=$!
    
    # 执行原有复制命令
    cp -Hpv ${CONTENTS} ${TMPDIR}
    
    # 复制完成后清理后台进程
    kill $CACHE_CLEAN_PID
    
    该方案下复制过程的内存占用不会超过30MB,完全不会触发cgroup OOM杀死进程,适配数千并发作业的批量运行场景。

注意:不建议采用管理员提出的超额预留RAM方案,该方案会在长达数天的模拟周期内锁定大量闲置内存,大幅降低集群资源利用率,也会限制单批次可提交的作业总数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:54:34