我正在寻找一些指导,以准确计算出我的作业在集群上使用了多少 RAM。我的作业不是多线程的,而是在单个 CPU 上运行的。
当我运行我的作业并运行“top”时,我可以看到它使用了这么多的 RAM......
VIRT: 45.6g
RES: 38g
SHR: 9600
对我来说,这意味着我使用了 38 GB 的实际 RAM,以及可能已移至交换空间的 7.6 GB 的内容。我正在测试的工具的作者表示,我的工作应该使用大约 40 GB 的数字。
当我从 SGE(使用 qstat 或 qacct)获取这些数字时,混乱就出现了。
qacct -j 7270916
在这里我看到
mem 2768.453
maxvmem 4.078G
但是,这些都没有接近我所知道的我正在使用的 45.6 GB 的 RAM(尽管 maxvmem 听起来确实应该代表 45.6 GB)。
当作业正在运行时,我尝试使用此命令
qstat -j 7270916
,其中我看到了以下行:
usage 1: cpu=00:01:37, mem=168.12988 GBs, io=38.64676, vmem=1.665G, maxvmem=4.078G
我猜测 mem 是运行过程中使用/释放/使用/释放的所有 RAM 的总和(刚刚完成),但 maxvmem 仍然很低(比我预期的 45.6 GB 少得多)。
因此,我使用 qcct 和 qstat 时生成的数字都与预期数字(我在 top 中看到)不一致。
有谁能建议如何在运行结束后使用 SGE 命令获取有意义的 RAM 使用数字吗?
编辑:我正在使用 SGE 6.2u5
答案1
这是一个老问题,但如果你还是没搞清楚,你可以输入
qstat -j <Job_ID>
类别“maxvmem”为您提供了您的作业运行时使用的最大 RAM 量。因此,maxvmem 的值就是您要查找的数值,以找到您的作业运行时使用的最大内存量。
此外,您只能在作业运行时使用 qstat。如果您想在作业完成后查看内存使用情况,则必须使用
qacct -j <Job_ID>.
希望这会有所帮助,下面是包含更多信息的链接。
http://wiki.genomics.upenn.edu/index.php/HPC:Large_memory_jobs