我正在寻找有关如何精确计算我的工作在我的集群上使用了多少 RAM 的一些指导。我的工作不是多线程的,而是在单个 CPU 上运行。
当我运行我的工作并运行“top”时,我可以看到它使用了这么多内存......
VIRT: 45.6g
RES: 38g
SHR: 9600
Run Code Online (Sandbox Code Playgroud)
这(纠正我错误的地方)对我来说意味着我正在使用 38 Gigs 的真实 RAM,以及 7.6 Gigs 的可能已被转移到交换的东西。大约 40 Gig 的数字是我正在测试的工具的作者所说的我的工作应该使用的数字。
当我从 SGE(使用 qstat 或 qacct)获得这些数字时,困惑就来了。
qacct -j 7270916
在这里我看到
mem 2768.453
maxvmem 4.078G
Run Code Online (Sandbox Code Playgroud)
然而,这些都没有接近我知道我正在使用的 45.6 gig 的 RAM(尽管 maxvmem 听起来确实应该代表 45.6 gig)。
在作业运行时,我尝试使用此命令
qstat -j 7270916
,其中看到了以下行:
usage 1: cpu=00:01:37, mem=168.12988 GBs, io=38.64676, vmem=1.665G, maxvmem=4.078G
Run Code Online (Sandbox Code Playgroud)
我想 mem 是运行中使用/释放/使用/释放的所有 RAM 的总和(它刚刚完成),但 maxvmem 仍然很低(远低于我预期的 45.6 gigs)。
所以我对 qcct 和 qstat 的使用都生成了与预期数字不一致的数字(我在顶部看到)。
有没有人有关于如何在运行完成后使用 SGE 命令获取有意义的 RAM 使用量的建议?
编辑:我使用的是 SGE 6.2u5