Я - непопулярный парень, который дважды на прошлой неделе сбивал нашу Linux-машину с высокой памятью, потому что некоторые процессы, которые я выполнял, потребляли намного больше оперативной памяти, чем ожидалось. Один из способов обойти это - установить ulimit для каждого процесса, чтобы, если каждый процесс превышает определенное количество оперативной памяти, этот процесс будет убит. Иногда, хотя мне нужно много оперативной памяти для одного процесса, а не некоторой оперативной памяти, распределенной по группе параллельных процессов. Вместо того, чтобы полагаться на то, что я не забываю об активном управлении моими ulimit всякий раз, когда я запускаю другой тип задания на другом уровне параллелизма, существует ли какой-то эквивалент ulimit, который смотрит на суммарное использование оперативной памяти для пользователя, а затем убивает все или некоторые из процессов этого пользователя вместо того, чтобы поглотить всю систему?
Почти именно поэтому Linux контрольные группы (cgroups) были изобретены. Это позволяет обрабатывать группу процессов (например, все процессы, происходящие от вашего первоначального интерактивного входа в систему) как единый объект для целей управления ресурсами - например, ограничения общего объема потребляемой памяти (или ресурсов процессора и т. Д.) .
К сожалению...
Cgroups являются относительно новыми, и в большинстве дистрибутивов для них практически отсутствует удобная поддержка.