如何通过JobID查询Linux已完成任务的峰值与平均内存占用
Linux下通过JobID查询已完成任务的内存占用(峰值/平均)
ps、top、htop或者grep VmPeak这类命令只能针对运行中的进程,没法获取已完成任务的内存数据。要查已完成任务的峰值和平均内存,得根据你用的任务调度器(或者任务启动方式)来用对应的工具:
1. Slurm调度器(常见于HPC集群)
如果你的JobID是Slurm生成的,用sacct命令直接查询:
sacct -j <你的JobID> --format=JobID,Elapsed,MaxRSS,AveRSS
MaxRSS:任务运行期间的峰值内存占用(单位通常是KB/MB,取决于系统配置)AveRSS:任务的平均内存占用
如果需要更详细的内存统计,可以加更多字段,比如虚拟内存相关数据:
sacct -j <你的JobID> --format=JobID,MaxRSS,AveRSS,MaxVMSize,AveVMSize
2. PBS/Torque调度器
用qacct命令查询已完成任务的内存数据:
qacct -j <你的JobID>
在输出里找这两个核心字段:
maxvmem:峰值虚拟内存占用avevmem:平均虚拟内存占用
3. LSF调度器
用bacct命令获取任务的详细统计:
bacct -j <你的JobID>
如果任务刚结束不久,也可以用bjobs -l <你的JobID>快速查看,输出里的内存相关字段会包含峰值使用情况。
4. 无集群调度器(本地后台任务)
如果是用&或者nohup启动的本地任务,事前没做监控的话很难回溯已完成任务的内存数据。但可以事前用/usr/bin/time -v启动任务,任务结束后会自动输出内存统计:
/usr/bin/time -v ./your_task.sh
输出里的Maximum resident set size (kbytes)就是任务的峰值内存占用,其他字段还包含内存相关的详细统计。
注意:直接用
time可能是shell内置的简化版,必须用/usr/bin/time才能触发带详细统计的版本。
内容的提问来源于stack exchange,提问作者user19898808
相关产品推荐
相关产品推荐

