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

PBS脚本中Matlab作业CPU核心使用统计需求:含峰值查询

如何在PBS作业中统计Matlab程序的CPU核心使用情况

刚好碰到过类似的需求,给你两个实用的方案,都是简洁易上手的,完全能输出你想要的那种清晰统计结果,还能帮你避免因为超核心被HPC系统终止作业的问题。

方案一:用pidstat快速监控(推荐)

pidstat是绝大多数HPC系统默认安装的sysstat工具集里的命令,专门用来统计进程级的CPU使用,输出规整,解析起来特别方便。

操作步骤

  1. 先写一个封装脚本(比如叫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
  1. 在你的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:16:05