У меня есть 24-ядерный сервер, к которому пользователи подключаются через SSH.
Они не предназначены для запуска программ с тяжелым процессором, таких как MATLAB, р или их собственные сценарии, выполняющие моделирование или тому подобное.
Есть ли способы обнаружить и kill -9
CPU тяжелые процессы автоматически?
Ты можешь ограничить ресурсы пользователей использование с PAM.
Я никогда не пробовал, поэтому понятия не имею, работает он правильно или нет ...
Для этого вам следует использовать контрольные группы.
См. "Man cgrules.conf" и "man cgconfig.conf".
Более поздние версии systemctl в Fedora должны поддерживать привязку пользователей непосредственно к контрольной группе, чтобы вы могли сделать это лучше.
Это не ограничивает ЦП в том смысле, что если есть доступные ресурсы ЦП (которые никто не использует), он будет использовать весь ЦП, однако если что-то еще требует ЦП, он выделит долю ЦП на основе настроенного «ЦП». стоимость акций.
Также, как было предложено, установление ulimit для процессорного времени гарантирует, что запущенному процессу будет дано совокупное количество jiffies, прежде чем он будет убит из-за использования слишком большого количества CPU. Это может негативно повлиять на длительные процессы, которые использует пользователь, которые естественным образом накопили определенное количество мгновений.
Вы также можете использовать cgroups для обеспечения того, чтобы все пользовательские процессы работали только на одном из ваших ядер, чтобы вы могли по крайней мере Гарантируем, что если один ЦП перегружен, это не окажет негативного влияния на остальные процессы операционной системы.
CGroups - также отличный способ ограничить использование памяти. Вы можете комбинировать его с pam_limits, чтобы предотвратить бомбардировку вилки.
Изменить: я также должен указать, что, по моему мнению, ваш запрос не обязательно актуален. То, что один процесс использует 100% ЦП, не обязательно плохо, если есть время для запуска других процессов. Совершенно честный планировщик в Linux в любом случае гарантирует такое поведение.
Если ЦП просто простаивает, нет ничего плохого в том, что один процесс использует весь ЦП. Ваша проблема возникает только тогда, когда несколько процессов требуют процессорного времени, а один из процессов загружает процессор. Здесь могут быть полезны контрольные группы, поскольку они позволяют вам контролировать, сколько процессорного времени вы будете выделять различным процессам в случае конфликта ЦП.