我在我们的大学集群(普通用户,没有管理员权限)上运行作业,它使用 SLURM 调度系统,我有兴趣绘制 CPU 和内存使用随时间的变化,即在作业运行时。我知道sacct
并且 sstat
我正在考虑将这些命令包含在我的提交脚本中,例如
#!/bin/bash
#SBATCH <options>
# Running the actual job in background
srun my_program input.in output.out &
# While loop that records resources
JobStatus="$(sacct -j $SLURM_JOB_ID | awk 'FNR == 3 {print $6}')"
FIRST=0
#sleep time in seconds
STIME=15
while [ "$JobStatus" != "COMPLETED" ]; do
#update job status
JobStatus="$(sacct -j $SLURM_JOB_ID | awk 'FNR == 3 {print $6}')"
if [ "$JobStatus" == "RUNNING" ]; then
if [ $FIRST -eq 0 ]; then
sstat --format=AveCPU,AveRSS,MaxRSS -P -j ${SLURM_JOB_ID} >> usage.txt
FIRST=1
else
sstat --format=AveCPU,AveRSS,MaxRSS -P --noheader -j ${SLURM_JOB_ID} >> usage.txt
fi
sleep $STIME
elif [ "$JobStatus" == "PENDING" ]; then
sleep $STIME
else
sacct -j ${SLURM_JOB_ID} --format=AllocCPUS,ReqMem,MaxRSS,AveRSS,AveDiskRead,AveDiskWrite,ReqCPUS,AllocCPUs,NTasks,Elapsed,State >> usage.txt
JobStatus="COMPLETED"
break
fi
done
但是,我并不真正相信这个解决方案:
sstat
不幸的是,没有显示目前使用了多少 CPU(仅平均)如果我尝试随时间记录内存使用情况,MaxRSS 也无济于事
似乎仍然有一些错误(作业完成后脚本不会停止)
有谁知道如何正确地做到这一点?甚至可能有top
或htop
代替sstat
?任何帮助深表感谢。