Cluster computing SGE(Sun Grid Engine)如何监视作业的VMEM(虚拟内存)使用情况?

Cluster computing SGE(Sun Grid Engine)如何监视作业的VMEM(虚拟内存)使用情况?,cluster-computing,sungridengine,sun,Cluster Computing,Sungridengine,Sun,SGE允许用户设置虚拟内存/vmem使用的限制(例如提交作业的h_vmem参数) 但是,SGE如何准确地监控VMEM的使用情况,并在超过时发送终止信号?它是否以某种频率进行投票?在进程树中添加一些内核提供的值?这在机械上是如何工作的?即使是不完整的解释或指向源代码的简单指针,我也会非常感激。我不熟悉SGE的详细工作原理,只是用来管理一个不久前使用过它的小型集群。但是,您的提问让我想起了以下脚本,我经常使用它来报告进程的内存: 基本上,在qsub脚本中运行的命令是该脚本和/或SGE监视器(qmo

SGE允许用户设置虚拟内存/vmem使用的限制(例如提交作业的
h_vmem
参数)


但是,SGE如何准确地监控VMEM的使用情况,并在超过时发送终止信号?它是否以某种频率进行投票?在进程树中添加一些内核提供的值?这在机械上是如何工作的?即使是不完整的解释或指向源代码的简单指针,我也会非常感激。

我不熟悉SGE的详细工作原理,只是用来管理一个不久前使用过它的小型集群。但是,您的提问让我想起了以下脚本,我经常使用它来报告进程的内存:

基本上,在
qsub
脚本中运行的命令是该脚本和/或SGE监视器(
qmon
)的子进程。因此,可能有一种方法以类似于上面链接的Python代码的方式监控内存使用。该守则的有关章节如下:

proc = Popen(child_command, stdin=None, stdout=None, stderr=None, env=None, shell=True)

vmpeak = -1
while proc.returncode == None:
    vmpeak = max(get_vsize(sid), vmpeak)
    log("Waiting for child to exit. vmpeak={}".format(vmpeak))
    proc.poll()
    sleep(0.1) # Time in seconds (float)

out.write("memusg: vmpeak: {} kb\n".format(vmpeak))
其中
child\u命令
是我们想要运行的实际命令。代码使用此命令启动进程,并定期监视它,在本例中,在进程完成时报告最大内存。如果内存超过某个最大值,那么更改此代码以跳出循环并杀死子进程是很简单的


希望这能有所帮助。

嗨,文斯,谢谢你的解释。在本例中,我非常好奇SGE到底是如何做到的,这样我就可以复制对进程树和轮询间隔的检查,但请欣赏这里的注释。也许可以尝试在源代码中搜索open grid scheduler?的代码。