PBS脚本中Matlab作业CPU核心使用统计需求:含峰值查询
如何在PBS作业中统计Matlab程序的CPU核心使用情况
刚好碰到过类似的需求,给你两个实用的方案,都是简洁易上手的,完全能输出你想要的那种清晰统计结果,还能帮你避免因为超核心被HPC系统终止作业的问题。
方案一:用pidstat快速监控(推荐)
pidstat是绝大多数HPC系统默认安装的sysstat工具集里的命令,专门用来统计进程级的CPU使用,输出规整,解析起来特别方便。
操作步骤
- 先写一个封装脚本(比如叫
run_matlab_with_stats.sh),把Matlab运行和监控绑定在一起:
#!/bin/bash # 后台启动Matlab,记录它的进程ID matlab -nojvm -r "someExperiment(params);exit()" & MATLAB_PID=$! # 启动pidstat,每隔1秒监控一次Matlab进程的CPU使用,输出到日志文件 pidstat -p $MATLAB_PID 1 > cpu_usage.log & PIDSTAT_PID=$! # 等待Matlab任务完成 wait $MATLAB_PID # 任务结束后停止监控进程 kill $PIDSTAT_PID # 解析日志,输出你要的统计结果 echo "=== Matlab Job CPU Statistics ===" echo -n "Max CPU usage: " awk '{if($NF>max) max=$NF} END{print max" cores"}' cpu_usage.log echo -n "Average CPU usage: " awk '{sum+=$NF; count++} END{print sum/count" cores"}' cpu_usage.log
- 在你的PBS脚本里调用这个封装脚本就行,比如:
#!/bin/bash #PBS -N matlab_experiment #PBS -l nodes=1:ppn=12 # 这里填你预分配的核心数 #PBS -l walltime=01:00:00 cd $PBS_O_WORKDIR ./run_matlab_with_stats.sh
运行完之后,你会看到类似这样的输出:
=== Matlab Job CPU Statistics === Max CPU usage: 11.8 cores Average CPU usage: 8.3 cores
同时还会保留cpu_usage.log日志文件,方便你事后排查细节。
方案二:纯Bash脚本监控(无需额外工具)
如果你的HPC系统没有安装pidstat,也可以用ps命令自己写个循环监控,完全依赖系统自带工具:
#!/bin/bash # 后台启动Matlab并记录PID matlab -nojvm -r "someExperiment(params);exit()" & MATLAB_PID=$! # 初始化统计变量 max_cpu=0 sum_cpu=0 count=0 # 每隔1秒检查一次Matlab进程是否存活,直到任务结束 while kill -0 $MATLAB_PID 2>/dev/null; do # 获取当前CPU使用百分比,转换成核心数(%CPU是单核心百分比,除以100就是核心数) cpu=$(ps -p $MATLAB_PID -o %cpu= | awk '{print $1/100}') # 更新总和与计数 sum_cpu=$(echo "$sum_cpu + $cpu" | bc -l) count=$((count+1)) # 更新最大核心使用量 if (( $(echo "$cpu > $max_cpu" | bc -l) )); then max_cpu=$cpu fi sleep 1 done # 格式化输出结果 echo "Max CPU usage: $(printf "%.1f" $max_cpu) cores" echo "Average CPU usage: $(printf "%.1f" $(echo "$sum_cpu / $count" | bc -l)) cores"
把这个脚本直接放到PBS里运行就行,输出同样简洁清晰。
几个关键注意点
- 监控间隔:上面用的是1秒,你可以根据需求调整(比如改成5秒),减少监控本身的系统开销。
- Matlab并行设置:一定要确保你的Matlab程序不会私自占用更多核心,比如用
parpool的话,记得设置parpool('local', 预分配核心数),从根源上避免超核心被终止。 - 权限问题:HPC系统一般都允许普通用户运行这些监控命令,要是碰到权限问题,可以联系管理员确认。
内容的提问来源于stack exchange,提问作者MathIsKey
相关产品推荐
相关产品推荐

