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

时间:2018-12-15 05:20:35

标签: cluster-computing sungridengine sun

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

但是,SGE如何精确监控VMEM使用情况,并在超出该范围时发送终止信号?它以某种频率轮询吗?在整个进程树中添加一些内核提供的值?如何机械地工作?即使是不完整的解释或简单的指向源代码的指针,也将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

https://github.com/jhclark/memusg

基本上,在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_command是我们要运行的实际命令。代码使用此命令启动一个进程并定期监视它,在这种情况下,在进程完成时报告最大内存。如果内存超过某个最大值,则更改此代码以打破循环并杀死子进程将是微不足道的。

希望这会有所帮助。