SLURM集群中如何获取当前已完成作业的内存使用情况?
解决SLURM数组作业内存使用统计问题
问题根源
你之前执行sacct时未指定当前作业的唯一ID,导致命令默认返回最近完成的作业数据,而非刚结束的当前数组任务。
解决方案1:精准定位当前作业执行sacct
在sacct命令中添加-j $SLURM_JOB_ID参数,直接指定当前任务的JobID(SLURM会自动为每个数组子任务分配唯一的SLURM_JOB_ID环境变量)。同时可添加短延迟确保SLURM数据库同步,避免查询不到数据。
修改后的sacct命令如下:
sleep 2 sacct -j $SLURM_JOB_ID --format=jobid,MaxRSS,MaxVMSize,start,end,CPUTimeRAW,NodeList
解决方案2:使用更简洁的seff命令
SLURM提供的seff命令专门用于查看单个作业的资源使用情况,输出更直观,无需复杂格式参数,直接执行:
seff $SLURM_JOB_ID
它会返回内存利用率、CPU利用率、作业状态等关键信息,其中Max RSS就是实际使用的最大内存。
修改后的完整作业脚本
#!/bin/bash #SBATCH --nodes=1 #SBATCH --ntasks=1 #SBATCH --mem=100G #SBATCH --time=12:00:00 #SBATCH --error=slurm.%A_%a.err #SBATCH --output=slurm.%A_%a.out # %A becomes the job ID, %a becomes the array index #SBATCH --mail-type=END,FAIL #SBATCH --mail-user=m@uni.de module purge module load hpc if [ "$mdepth" == "" ] then mdepth=3 fi echo "config:"$SLURM_ARRAY_JOB_ID","$SLURM_ARRAY_TASK_ID","$file","$solver { time ./ista --max-depth $mdepth --i $file | tee SomeFile.txt; } 2>&1 # 方案1:带延迟的精准sacct查询 sleep 2 sacct -j $SLURM_JOB_ID --format=jobid,MaxRSS,MaxVMSize,start,end,CPUTimeRAW,NodeList # 方案2:如果更偏好简洁输出,可替换为下面的seff命令 # seff $SLURM_JOB_ID
内容的提问来源于stack exchange,提问作者ELI
相关产品推荐
相关产品推荐

