Torque作业随机终止求助:Python3批量脚本运行异常排查
解决PBS脚本运行1小时后随机终止的问题
我太懂你现在的糟心处境了——用PBS调度Python3批量处理27个任务,结果每次跑1小时左右就毫无预兆地挂掉,哪怕延长了wall time也完全没用。咱们一步步拆解可能的问题,挨个排查:
一、先查PBS的资源限制(不止wall time!)
- 内存超限是重灾区:很多时候作业被干掉根本不是因为时间,而是内存不够触发了OOM killer。你先去tracejob日志里搜搜有没有
Out of Memory或者Killed by signal 9这类关键词,这是内存爆了的典型信号。要是有这情况,赶紧在PBS脚本里加内存限制:#PBS -l mem=XXgb(XX根据你的任务需求填,比如8gb、16gb)。 - CPU核心数是否匹配:如果你的Python脚本用到了多线程,但PBS默认分配的核心数不够,或者反过来单线程任务占了太多核心导致资源冲突?可以在脚本里明确指定核心数:
#PBS -l nodes=1:ppn=X,X是你实际需要的核心数量。
二、Python脚本本身的坑
- 资源泄漏要警惕:批量处理时,每跑完一个输入,有没有正确清理资源?比如打开的文件没
close()、大列表/数组没清空,内存会越攒越多,最后直接撑爆。你可以在每个任务处理完后加个内存监控的小代码,把输出打到日志里看看趋势:import psutil print(f"当前内存使用: {psutil.Process().memory_info().rss / 1024 ** 2:.2f} MB") - 输入文件有没有异常:你提到脚本读取
m...的内容,会不会某个输入文件格式错了、数据量突然暴增?导致脚本处理时卡住或者崩溃?给每个任务加详细日志,比如print(f"正在处理输入: {input_file},当前步骤XXX"),这样作业终止时能直接定位到是哪个任务出了问题。
三、PBS作业的环境与日志细节
- 节点故障概率虽小但要查:去tracejob完整日志里看看有没有
Node failure或者Job terminated due to node error这类提示,如果是节点随机抽风,那就换个队列试试,比如在PBS脚本里加#PBS -q 稳定队列名(比如你的集群有专门的batch队列或者highmem队列)。 - 工作目录权限/变量解析问题:你要切换到
results/$sizex$size目录存文件,会不会某个目录创建失败?比如权限不够,或者$size变量没正确解析?在脚本里加几步验证:
这样如果目录切换失败,脚本会直接退出,不会稀里糊涂继续跑。echo "当前工作目录: $(pwd)" mkdir -p results/${size}x${size} echo "已创建目录: results/${size}x${size}" cd results/${size}x${size} || exit 1
四、先测单个任务的稳定性
别着急批量跑,挑几个输入单独用PBS提交,看看会不会也在1小时左右终止。如果单个任务也挂,那就是单个任务本身的问题——比如处理某个输入需要的时间远超预期,或者有隐藏的死循环;如果单个任务能正常跑完,那就是批量处理时的资源竞争或者脚本的批量逻辑有漏洞。
内容的提问来源于stack exchange,提问作者Lewis
相关产品推荐
相关产品推荐

