У меня есть SSH-сервер, на котором пользователи входят в систему для выполнения различных задач. Проблема в том, что у меня 4 ядра, и один пользователь выполняет задачи на 4. Как я могу ограничить количество ядер, которые может использовать любой данный пользователь?
Это не виртуальная машина.
ОБНОВЛЕНИЕ: Я читал /etc/security/limits.conf и видел
#* soft core 0
#root hard core 100000
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#ftp - chroot /ftp
#@student - maxlogins 4
Я пытался настроить это так, чтобы пользователь ограничивался тремя процессами. но пользователь получает
-bash: fork: retry: No child processes
в своем терминале.
Я начал изучать ulimit и квоту
taskset (1) может помочь вам. Он может установить основной номер для одного процесса. Вы можете использовать PS (1) , чтобы получить весь процесс целевого пользователя. Например,
housezet@arch: ~
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
Этот текущий процесс будет ограничивать использование только одного ядра. И если также допустимо ограничение использования процессора, вы также можете рассмотреть возможность использования cpulimit (1) .
Я не верю, что существует какой-либо существующий инструмент, который бы справлялся с тем, что вам нужно, поскольку это не особенно легко сделать. Обработка того, какой процесс идет, где не делается в пользовательском пространстве.
Единственный способ сделать то, что вам нужно, - это использовать ulimit
, чтобы установить максимальное количество процессорного времени, что помешает пользователю слишком сильно перегружать все. Вы также можете изменить уровень пользователя nice
, поэтому, если конкретный пользователь сбивает процессор, вы можете снизить его приоритетность.