Я не знаком с тем, как 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
- фактическая команда, которую мы хотим выполнить.Код запускает процесс с помощью этой команды и контролирует его через регулярные промежутки времени, и в этом случае сообщает о максимальном объеме памяти, когда процесс завершается.Было бы тривиально изменить этот код, чтобы вырваться из цикла и убить дочерний процесс, если объем памяти превышает некоторый максимум.
Надеюсь, это поможет.