【发布时间】:2018-12-15 05:20:35
【问题描述】:
SGE 使用户能够设置虚拟内存/vmem 使用限制(例如,用于提交作业的 h_vmem 参数)。
但是 SGE 究竟如何监控 VMEM 使用情况并在超出时发送终止信号?它是否以某种频率进行轮询?在进程树中添加一些内核提供的值?这是如何机械地工作的?即使是不完整的解释或简单的源代码指针也将不胜感激。
【问题讨论】:
标签: cluster-computing sungridengine sun
SGE 使用户能够设置虚拟内存/vmem 使用限制(例如,用于提交作业的 h_vmem 参数)。
但是 SGE 究竟如何监控 VMEM 使用情况并在超出时发送终止信号?它是否以某种频率进行轮询?在进程树中添加一些内核提供的值?这是如何机械地工作的?即使是不完整的解释或简单的源代码指针也将不胜感激。
【问题讨论】:
标签: cluster-computing sungridengine sun
我不熟悉 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 是我们要运行的实际命令。代码使用此命令启动进程并定期监视它,在这种情况下,当进程完成时报告最大内存。如果内存超过某个最大值,更改此代码以跳出循环并终止子进程将是微不足道的。
希望这会有所帮助。
【讨论】: