【问题标题】:How does SGE (Sun Grid Engine) Monitor VMEM (Virtual Memory) Usage for Jobs?SGE(Sun Grid Engine)如何监控作业的 VMEM(虚拟内存)使用情况?
【发布时间】:2018-12-15 05:20:35
【问题描述】:

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

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

【问题讨论】:

    标签: cluster-computing sungridengine sun


    【解决方案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 是我们要运行的实际命令。代码使用此命令启动进程并定期监视它,在这种情况下,当进程完成时报告最大内存。如果内存超过某个最大值,更改此代码以跳出循环并终止子进程将是微不足道的。

    希望这会有所帮助。

    【讨论】:

    • 您好文斯,感谢您的解释。在这种情况下,我很好奇 SGE 究竟是如何做到的,因此我可以复制对进程树和轮询间隔的检查,但感谢这里的说明。
    • 也许尝试在源代码中搜索开放网格调度程序的代码? sourceforge.net/p/gridscheduler/code/HEAD/tree/trunk/source.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    相关资源
    最近更新 更多