В репозиториях популярных Linux дистрибутивов можно найти полезную утилиту cpulimit (http://cpulimit.sourceforge.net/),
которая позволяет легко ограничить занимаемые определенной программой процессорные ресурсы.
Метод работы программы оригинален, в зависимости от указанного процента допустимой нагрузки,
процесс периодически останавливается через отправку сигнала SIGSTOP, а затем работа возобновляется через SIGCONT.Например, ограничиваем потребление CPU для работающей программы find в 30%.
Определяем идентификатор процесса:$ ps -aux|grep find
user 3470 7.0 7.9 25516 16252 ? Sl 17:05 14:19 /usr/bin/findОграничиваем:
$ cpulimit --pid 3470 --limit 30
На многопроцессорных системах, процент нужно указывать с учетом числа CPU, т.е. для 4 процессорной машины для
указания работы без ограничений нужно поставить не 100%, а 400%.
URL:
Обсуждается: https://www.opennet.ru/tips/info/2105.shtml
А при запуске программы можно сразу эту утилизацию ограничить?
Не работает оно как надо. Собирается, запускается, но правильно не работает.
P.S.
запускалось под фрей.. нерабочесть заключается в том, что при -l <NUM> реальная планка ограничения сильно ниже, так -l 40 дает %CPU ~5%
У меня работает. Правда если запускать с ключом --pid (напрмиер firefox) то у меня выдало segmentation fault... ф если с ключом -е firefox-bin -l 20 то работает, top потверждает
а она сама себя ограничивать умеет? ;)
cpulimit --pid `ls /proc/self/task/` --limit 1
>cpulimit --pid `ls /proc/self/task/` --limit 1И чей это PID будет? Shell'а? ;)
Ага, писал аналогичную фигню для хостинга, лимитирует по тому же принципу. Только висит демоном и сама вычисляет зажравшиеся процессы.Всё хорошо до тех пор, пока процесс не запущен из консольки. Тогда всё это вываливается обратно в консольку, что не всем понятно и уж точно доставляет некоторые неудобства.
Фантастика! Работает идеально в Ubuntu 9.04... Спасибо за полезную инфу!
pavel@amd64:~> cpulimit 30 firefox
LoadPlugin: failed to initialize shared library /usr/lib/Adobe/Reader8/Browser/intellinux/nppdf.so [/usr/lib/Adobe/Reader8/Browser/intellinux/nppdf.so: неправильный класс ELF: ELFCLASS32]
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/opt/kde3/$LIB/libartsdsp.so.0' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/opt/kde3/$LIB/libartsc.so.0' from LD_PRELOAD cannot be preloaded: ignored.
*** NSPlugin Viewer *** ERROR: /usr/lib/mozilla/plugins/npPicasa3.so: cannot open shared object file: No such file or directory
LoadPlugin: failed to initialize shared library /usr/lib/jdk1.6.0_07/jre/plugin/i386/ns7/libjavaplugin_oji.so [/usr/lib/jdk1.6.0_07/jre/plugin/i386/ns7/libjavaplugin_oji.so: неправильный класс ELF: ELFCLASS32]
LoadPlugin: failed to initialize shared library /usr/lib64/firefox/plugins/nppdf.so [/usr/lib64/firefox/plugins/nppdf.so: неправильный класс ELF: ELFCLASS32]
LoadPlugin: failed to initialize shared library /usr/lib/jdk1.6.0_07/jre/plugin/i386/ns7/libjavaplugin_oji.so [/usr/lib/jdk1.6.0_07/jre/plugin/i386/ns7/libjavaplugin_oji.so: неправильный класс ELF: ELFCLASS32]
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/opt/kde3/$LIB/libartsdsp.so.0' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/opt/kde3/$LIB/libartsc.so.0' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/lib/libmalloc.so.1' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/opt/kde3/$LIB/libartsdsp.so.0' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/opt/kde3/$LIB/libartsc.so.0' from LD_PRELOAD cannot be preloaded: ignored.
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8(npviewer.bin:9972): Gtk-WARNING **: Загружаемый модуль тем не найден в module_path: "qtcurve",
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
Flash Player: Warning: environment variable G_FILENAME_ENCODING is set and is not UTF-8
/usr/bin/firefox: line 123: 9903 Превышен лимит процессорного времени $MOZ_PROGRAM "$@"
Ну ELFCLASS32 понятно, а нах... отваливаться после 30 сек.
>pavel@amd64:~> cpulimit 30 firefoxUsage: cpulimit TARGET [OPTIONS...]
TARGET must be exactly one of these:
-p, --pid=N pid of the process
-e, --exe=FILE name of the executable program file
-P, --path=PATH absolute path name of the executable program file
OPTIONS
-l, --limit=N percentage of cpu allowed from 0 to 100 (mandatory)
-v, --verbose show control statistics
-z, --lazy exit if there is no suitable target process, or if it dies
-h, --help display this help and exit>Ну ELFCLASS32 понятно, а нах... отваливаться после 30 сек.
уж очень на ulimit похоже...
пилите, Шура
Что только не учудят лишь бы не пользоваться приоритетами ))Страшно неоптимальное решение.
Согласен.
Зато работает идеально. Нужно было как-то сервак WoW держать, так какой приоритет не ставь всё равно будет жрать всё что видит.
Не забываем что процессор загруженный на 50% это лучше чем на 100% (охлаждение, энергопотребление и т.д.) особенно когда прога жрёт то что ей жрать вроде и не обязательно
Даааа, пользователи WoW будут плакать от счастья в те моменты, когда сервак будет "притормаживаться" через SIGSTOPТакой маразматический способ ограничения ресурсов только для неинтерактивных интенсивных задач типа find или там считалок чего-нибудь подходит. Запускать под ним сервер, с которым идет интерактивная работа - даже слов нет, чтобы описать такое.
Для backup, например, самое оно. Спасибо за заметку!
cgroup уже не модно?
>cgroup уже не модно?Примеры в студию
в никсах можно создать пользователя которому ограничить CPU limit + если нужно MEM limit и запускать проекты типа WoW от имени такого пользователя
тоже красивый выход - имхо
>в никсах можно создать пользователя которому ограничить CPU limit + если нужно
>MEM limit и запускать проекты типа WoW от имени такого пользователяКвота на CPU в Unix подразумевает ограничение общего суммарного процессороного времени, а не приоритета перед другими процессами. Т.е. вы запретите процессу использовать больше N секунд процессорного времени в сумме, не более.
>>в никсах можно создать пользователя которому ограничить CPU limit + если нужно
>>MEM limit и запускать проекты типа WoW от имени такого пользователя
>
>Квота на CPU в Unix подразумевает ограничение общего суммарного процессороного времени, а
>не приоритета перед другими процессами. Т.е. вы запретите процессу использовать больше
>N секунд процессорного времени в сумме, не более.Так и текст в новости не про приоритеты.
Вообще да, интересно, как себя будет вести сервер в указанных ограничителях)
>Так и текст в новости не про приоритеты.
>Вообще да, интересно, как себя будет вести сервер в указанных ограничителях)В случае с cpulimit процесс просто будет меньше нагружать CPU давая работать другим, а в случае cpu quota (ulimit -t) будет ограничено общее время использования CPU, т.е. процес будет продолжать съедать все ресурсы, но вырубится после того как квота будет исчерпана.
Ребята, откройте для себя Documentation/cgroups и всё сделаете без всяких костылей.
В RHEL cgroups пока еще нет
Это вариант!
- но есть такой вопрос - который - как новичку - казался элементарным!
- Но, оказалась – НЕ РАЗЗРЕШИМОЙ ПРОБЛЕМОЙ – ибо – на диске более200 ГБ!
Ситуация СЛЕДУЮЩАЯ:
При приобретении ACER ASPIRE 5732Z - установили и приложили установочный DVD - на "Росинка" LM8, с ядром - 2.6.31-14 generic, приобретена и WebCam logitech C250 и радио модем HUAWEI EC325.Обещали методическую помощь для установки купленных устройств.
Получить обещанной помощи - не удалось.Сам установил WebCam под Cheese – добавив недостающие пакеты.
При попытке подключить радио модем - прервалась проводная связь с Интернетом - которая работала из коробки.
Как использовать установочный диск DVD - для установки пакетов ПО, когда убрал лишние - для радио модема - видимо затронул базовые.
Полагаю – должна бать возможность – установочный DVD по умолчанию – как депозиторий.
Ибо и иконка регулятора звука пропала.
А при запуске с установочного диска - ВСЁ ИМЕЕТСЯ - КАК ВЕРНУТЬ ПОТЕРИ?
ВСЕМ ЗАРАНЕЕ ПРИЗНАТЕЛЕН!!!Сергей