关于mem和vmem

关于mem和vmem

我正在使用在Linux下运行的集群机器。

我有一个 shell 脚本,用于mpirun将我的作业提交到集群计算机。在同一脚本中,我可以选择分配给作业的节点数量。到目前为止,一切都很好。

我的问题出现在:当我提交一些作业时,一切正常,但是,当我填满节点的容量时,某些提交的作业将无法完成。因此,我怀疑集群上的可用内存不足以同时处理我的所有工作。

这就是为什么我想检查每个作业随着时间的推移的内存使用情况,然后我使用该qstat -f命令,但它显示了很多东西,其中大多数我无法理解。

所以这是我的问题:在下面命令的示例输出中qstat -f,我们可以看到两种类型的内存:memvmem。我想知道这两者有什么区别,实际使用的内存量是多少?

resources_used.cput = 00:21:04
resources_used.mem = 2099860kb
resources_used.vmem = 40505676kb
resources_used.walltime = 00:21:08

此外,如果有详细说明该命令输出的参考资料,我将不胜感激。我尝试了 man qstat 但它没有详细说明每个返回行。

答案1

只是为了将其从未决问题列表中删除并给出简化的答案(上面的 goldilocks 评论和 qstat 文档假设您对系统有更深入的熟悉):

答案取决于“实际使用的内存量”的确切含义(以及稍后在您对评论的回复中:“已使用的 RAM 空间”)。

输出中的“mem”qstat -f是您的作业使用了多少机器的 RAM,更准确地说是观察到的峰值使用情况。这不一定是真正的峰值使用情况,因为集群上的作业监控系统可能只是偶尔检查使用情况。您的作业可能尝试使用比此处报告的更多的内存,但系统没有为作业提供更多内存,例如因为没有更多内存或同一台计算机上运行的其他任务竞争内存。此外,如果存在大量文件活动 (I/O),文件系统缓存可能会成为 RAM 的竞争对手。

“vmem”是一个与现代处理器管理内存的方式相关的数量。这又是一个峰值。该数字可以包括进程可以访问的各种内容,例如内存映射文件和交换空间。它包括进程分配但从未使用的空间,因此可能非常大。如果数字较低,则可以得出结论:内存不是问题,但如果数字较高,则您不知道并且需要进一步调查。一些应用程序分配大量虚拟内存,即使它们只需要一小部分。

相关内容