Ограничение определенных процессов до% процессора - Linux - PullRequest
30 голосов
/ 22 декабря 2008

У меня следующая проблема: некоторые процессы, генерируемые динамически, имеют тенденцию к потреблению 100% ресурсов ЦП. Я хотел бы ограничить весь процесс, соответствующий какому-либо критерию (например, имя процесса), до определенного процента загрузки процессора.

Конкретная проблема, которую я пытаюсь решить, заключается в использовании процессов свёртывания @ домашнего работника. Лучшее решение, о котором я могу подумать, - это Perl-скрипт, который выполняется периодически и использует утилиту cpulimit для ограничения процессов (если вас интересует более подробная информация, посмотрите этот пост в блоге ). Это работает, но это взломать: /

Есть идеи? Я хотел бы оставить обработку процессов для ОС :)


Еще раз спасибо за предложения, но мы все еще не достигли цели:)

Решение "slowDown" - это, по сути, утилита "cpulimit". Мне все еще нужно позаботиться о том, какие процессы замедлить, убить процесс «slowDown» после завершения рабочего процесса и запустить новые для новых рабочих процессов. Это именно то, что я сделал со скриптом Perl и работой cron.

Основная проблема в том, что я заранее не знаю, какие процессы ограничивать. Они генерируются динамически.

Может быть, есть способ ограничить все процессы одного пользователя определенным количеством процессорного процента? Я уже настроил пользователя для выполнения заданий fold @ home, надеясь, что смогу ограничить его файлом /etc/security/limits.conf. Но самое близкое, что я мог получить - это общее время процессора на пользователя ...

Было бы здорово, если бы было что-то, что позволило бы вам сказать: Msgstr "Сумма использования ЦП всех процессов этого пользователя не может превышать 50%". А потом пусть процессы борются за эти 50% процессоров в соответствии с их приоритетами ...


Ребята, спасибо за ваши предложения, но речь идет не о приоритетах - я хочу ограничить% процессорного времени, даже если есть достаточно процессорного времени. Процессы уже имеют низкий приоритет, поэтому они не вызывают проблем с производительностью.

Я бы просто хотел, чтобы процессор не работал на 100% в течение продолжительных периодов ...

Ответы [ 15 ]

0 голосов
/ 27 января 2009

Я действительно не понимаю, почему вы хотите ограничить процессорное время ... вам следует ограничить общую нагрузку на эту машину, и нагрузка в основном определяется операциями ввода-вывода. Пример: если я создаю цикл while (1) {}, он получит общую загрузку до 1,0, но если этот цикл выполнит, какой-нибудь диск записывает, скачки нагрузки до 2,0 ... 4,0. И это то, что убивает вашу машину, а не использование процессора. Использование процессора может быть легко обработано с помощью nice / renice.

В любом случае, вы можете создать скрипт, который выполняет 'kill -SIGSTOP PID' для определенного PID, когда нагрузка становится слишком высокой, и kill -SIGCONT, когда все возвращается в норму ... PID можно определить по используя команду «px aux», потому что я вижу, что она отображает загрузку процессора, и вы сможете сортировать список по этому столбцу. Я думаю, что все это можно сделать в bash ...

0 голосов
/ 23 декабря 2008

Бросив туда некоторые спящие вызовы, процесс должен на некоторое время отключиться от процессора. Если вы спите 30 секунд один раз в минуту, ваш процесс не должен в среднем использовать более 50% загрузки ЦП в течение этой минуты.

0 голосов
/ 22 декабря 2008

Это можно сделать с помощью setrlimit (2) (в частности, установив параметр RLIMIT_CPU).

0 голосов
/ 22 декабря 2008

Вы можете уменьшить частоту процессора. Тогда вам не нужно беспокоиться об отдельных процессах. Когда вам нужно больше процессоров, увеличьте частоту.

0 голосов
/ 22 декабря 2008

Команда nice , вероятно, поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...