Как ограничить использование ресурсов для сохранения CPU+RAM для определенного процесса?

Эти файлы часто используются демонами, которые должны только быть выполнены однажды в системе. Файл PID обычно содержит Идентификационный номер процесса уже запущенной и запускающей программы, если Вы существуете. Кроме того, когда это запускает, это создает файл блокировки. Пока файл блокировки существует, он не запустит другой без вмешательства пользователя. Если файл блокировки существует, и идентификатор процесса, упомянутый в изодромном с предварением файле, не работает, демон считается в "мертвом" состоянии, подразумевая, что это, как предполагается, работает, но не происходит, вероятно, из-за катастрофического отказа или неподходящего завершения работы. Это могло бы инициировать специальный запуск / сценарий перезапуска для некоторых программ. Правильно завершение работы его удалит файл блокировки.

25
27.10.2014, 21:48
4 ответа

Можно, вероятно, достигнуть чего-то как этот при помощи cgroups с контроллером Ресурса памяти.

Я предполагаю, что Вы поместили все свои использующие ресурс задачи в ограниченное (CPU & RAM) cgroup, и отпуск sshd "снаружи" так, чтобы это не ограничивается.

(Добавляющий больше подкачки, даже в форме файла подкачки, мог бы быть хороший вариант все же.)

9
27.01.2020, 19:40
  • 1
    , который я все еще колеблюсь, это не выглядит легким (испорченный Ubuntu). –  phunehehe 07.06.2011, 18:43
  • 2
    , о, это, конечно, не легко :-) Добавление подкачки намного легче. –  Mat 07.06.2011, 18:44
  • 3
    @phunehehe, добро пожаловать в то, чтобы быть Администратором Sys, это не легко. Но теперь необходимо изучить, как не сделать легкого материала. –  xenoterracide 08.06.2011, 16:00

Использовать renice получить более высокий приоритет для sshd, или проверьте учет. (acct)-> с этим можно установить ресурсы для пользователей, таким образом, выполняет sshd с s

1
27.01.2020, 19:40
  • 1
    я добавил бы ionice к этому также, и вероятно запускают sshd с хорошего не renicing это позже. –  xenoterracide 08.06.2011, 16:03

О, но cgroups легки :) Установите libcgroup пакет. Создайте/etc/cgconfig.conf:

mount {
    cpu     = /cgroup/cpu_and_mem;
    cpuacct = /cgroup/cpu_and_mem;
    memory  = /cgroup/cpu_and_mem;
}

group sshd {
        cpu {
                cpu.shares="500";
        }
        cpuacct {
                cpuacct.usage="0";
        }
        memory {
                memory.limit_in_bytes="1G";
        }
}

group nosshd {
        cpu {
                cpu.shares="500";
        }
        cpuacct {
                cpuacct.usage="0";
        }
        memory {
                memory.limit_in_bytes="1G";
        }
}

Запустите cgconfig процесс, который создаст иерархию, cgroups, и установит пределы. Если это успешно выполняется, у Вас есть два cgroups, оба из которых имеют 50% присвоенного ЦП и 1G доступной памяти (не знают, каков Ваш фактический объем доступной памяти; принятие это - 2G в этом примере). Теперь просто необходимо переместить все задачи (т.е. все процессы, работающие на системе) от корневой группы в nosshd cgroup:

cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks

Затем просто необходимо получить PID sshd процесс и перемещение это информация sshd файл задач:

cgroup]# echo $PID >> sshd/tasks

Ta-da, Вы сделаны. Можно теперь пребывать в уверенности, что sshd будет всегда иметь 50% ЦП и 1G памяти.

6
27.01.2020, 19:40

Более общим решением проблемы использования ресурсов приложения является запуск ваших приложений в контейнере с помощью Docker. Затем вы можете запускать контейнеры с ограничениями на использование процессора и памяти, аналогичными cgroups.

docker run -c=10 -m=1g my-container
1
27.01.2020, 19:40

Теги

Похожие вопросы