Как ограничить использование центрального процессора для любого процесса в Linux

Вы когда нибудь сталкивались с ситуацией, когда запуск обычного приложения (как например Firefox) приводит к тому, что вся ваша система начинает подвисать? Если у вас, к примеру, работает веб сервер, то последнее что бы вы хотели видеть — это то, как какое то приложение «ложит» всю систему, а с ней и все работающие на ней сайты.

Cpulimit — это приложение в Linux, которое сможет ограничить любой процесс в использовании вашего центрального процессора (CPU). Оно будет полезным, если вы хотите ограничить конкретное приложение в использовании им CPU-ресурса и предотвратить возможный крах системы. Это приложение также будет незаменимым, когда вы хотите преднамеренно запускать ресурсоёмкие приложения.

Примечание: сpulimit работает на всех дистрибутивах Linux, но в нашей статье мы будем использовать Ubuntu для примера.

Инсталляция.

В Ubuntu вы сможете установить Cpulimit используя Центр приложений Ubuntu (Ubuntu Software Center), или набрать следующую команду в терминале:

sudo apt-get install cpulimit

Использование.

Чтобы ограничить процесс используйте следующий синтаксис команды:

sudo cpulimit -p PID -l CPU%

Где PID — это ID процесса запущенного приложения, а CPU% — это процент (число от 0 до 100) CPU-ресурса разрешенного для этого приложения. Вы сможете получить PID из: Система (System) -> Администрирование (Administration) -> Системный монитор (System Monitor).

Из рисунка выше мы видим, что приложение Swiftfox (аналог Firefox) использует 68% CPU-ресурса. Применим Cpulimit для того чтобы ограничить его, к примеру, до 20%. Для этого введем в терминале следующую команду:

sudo cpulimit -p 6517 -l 20

Теперь использование CPU упало ниже 20% и никогда не превысит это значение.

Расширение возможностей Cpulimit — автоматизация ограничения.

Приложение Cpulimit полезно когда вы сталкиваетесь с программами, которые сразу начинают потреблять много CPU-ресурсов, а вам необходимо постоянно следить за загруженностью вашего процессора. Кроме того, вы можете также настроить его для мониторинга любого приложения в системе непрерывно. Эта возможность может пригодиться для сервера.

В этой статье вы сможете найти и скачать скрипты, которые автоматизируют мониторинг вашей системы и ограничат выбранные вами приложения с помощью черных/белых списков до заданного вами значения использования CPU.

Но перед началом необходимо убедиться, что у вас установлены пакеты cpulimit и gawk. Для этого наберите следующую команду в терминале:

sudo apt-get install cpulimit gawk

Ответьте на вопрос «у» для доустановки нужных пакетов.

Скачайте архив со скриптами, выложенный в конце этой статьи, и распакуйте их в ваш домашний каталог (/home/имя_юзера). Вы увидите два файла: cpulimit_daemon.sh and cpulimit.

Откройте файл cpulimit_daemon.sh в текстовом редакторе (gEdit) и изметите следующее:

  • CPU_LIMIT — это максимальное значение CPU-ресурса, допустимое для каждого приложения. Значение по умолчанию: 20%.
  • DAEMON_INTERVAL — это интервал времени, через который скрипт будет проверять систему. По умолчанию 3 секунды.
  • BLACK_PROCESS_LIST — этот список содержит приложения, которые нужно контролировать. Необходимо использовать символ “|” для добавления сразу нескольких программ. Для примера: “mysql|firefox|gedit“.
  • WHITE_PROCESSES_LIST — этот список содержит приложения, которые НЕ нужно контролировать. Необходимо использовать символ “|” для добавления сразу нескольких программ. Для примера: “mysql|firefox|gedit“.

Примечание: один из этих двух списков BLACK_PROCESS_LIST или WHITE_PROCESSES_LIST должен быть обязательно пуст, так как вы не можете иметь оба списка одновременно.

Установка.

Скопируйте файл cpulimit_daemon.sh в директорию /usr/bin/, для этого в терминале:

sudo cp ~/cpulimit/cpulimit_daemon.sh /usr/bin
sudo chmod 700 /usr/bin/cpulimit_daemon.sh

Скопируйте файл cpulimit в директорию /etc/init.d/, установите необходимые права и сделайте запуск при загрузке:

sudo cp ~/cpulimit/cpulimit /etc/init.d/
sudo chown root:root /etc/init.d/cpulimit
sudo chmod +x /etc/init.d/cpulimit
sudo update-rc.d cpulimit defaults

Теперь перезагрузите вашу систему и cpulimit запуститься автоматически.

Чтобы проверить работает ли cpulimit, необходимо набрать в терминале:

sudo service cpulimit status

Если приложение не запущено, то запустить/остановить его можно соответственно следующими командами:

sudo service cpulimit start
sudo service cpulimit stop

Удаление.

Для полного удаления cpulimit из вашей системы необходимо выполнить следующее.

1. Остановить процесс cpulimit:

sudo service cpulimit stop

2. Удалить процесс из автозапуска:

sudo update-rc.d -f cpulimit remove

3. Удалить сам файл запуска:

sudo rm /etc/init.d/cpulimit

4. Удалить даемон cpulimit:

sudo rm /usr/bin/cpulimit_daemon.sh

5. Удалить саму программу cpulimit:

sudo apt-get remove cpulimit

А также, если была установлена программа gawk:

sudo apt-get remove gawk

Вот и вся полезная информация об полезной программе Сpulimit.

Скачать архив со скриптами можно по следующей ссылке:

<<<СКАЧАТЬ>>>

Оцените эту статью: 1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд6 Звезд7 Звезд8 Звезд9 Звезд10 Звезд (2 голосов, среднее: 10,00)
Загрузка...

12 Комментариев

  1. Photographer

    Спасибо! Очень вовремя нашел вашу статью.

    1. administrator (Автор записи)

      Пожалуйста, для этого этот сайт и создан.

  2. Евгений

    На Fedora 13 не получается:

    bash-4.1# yum install cpulimit
    Подготовка к установке
    Пакет cpulimit недоступен.
    Ошибка: Выполнять нечего

    Попробую скачать по ссылке в новости!

  3. administrator (Автор записи)

    Да, на моем сайте вы сможете скачать программу cpulimit только в deb пакете. Попробуйте поискать cpulimit.rpm. Если такого пакета нет, то возможно попробовать собрать его с исходников.

  4. Евгений

    Помогите пожалуйста сделать все что указано тут
    под Fedora 13, через удаленное управление сервером (SSH)
    т.е. без запуска приложения локально и управления конфигурацией мышкой т.к сам я не смогу пересобрать с исходников.

    а также в «top» консоли не отображает id процесса, но есть определенное имя процесса, которое нужно сбрасывать при пиковой нагрузке.

  5. Евгений

    к примеру вывод TOP

    PID USER PR NI RES S VIRT SHR %CPU %MEM TIME+ COMMAND
    6696 root -3 0 144m S 326m 23m 20.3 3.6 6:11.62 srcds_linux

    сейчас «srcds_linux» потребляет CPU 20%, но очень часто этот показатель доходит до 100% и система виснет, нужно только этот процесс ограничить в 65%, либо при поднятии его до 95% делать
    killall srcds_linux

  6. Евгений

    Пока сделал необходимо для меня таким образом:
    1) скачал и распаковал файлы
    2) создал папку cpulimit
    3) через фтп закинул файлы
    4) через консоль (putty) зашел в папку с файлами и написал make
    5) после этого пишу ./cpulimit -P /home/путь_к_файлу/srcds_run -l 80
    теперь даже после сброса этого процесса cpulimit сам автоматом возьмет ID процесса по названию и снова применит к нему свои ограничения.

    но т.к. необходимо было сделать это все в фоновом режиме установил и запустил screen
    пишу screen
    в тут уже запускаю свою строку:
    ./cpulimit -P /home/путь_к_файлу/srcds_run -l 80

    после этого жму CTRL+A, d
    выхожу из скрина и покидаю сервер:)

    Но что бы не мучатся со screen необходимо выполнить как сказано тут, а пока вот такой альтернативный вариант для Fedora 13

  7. Олег

    Выражаю большую благодарность автору за скрипты! На UbuntuServer 10.04.4 LTS всё заработало с первого раза! Кроме того, наблюдается равномерное перераспределение нагрузки ресурсоёмких процессов из «BLACK_PROCESS_LIST» на все 4 ядра ЦП.

    Респект!

  8. hitmany

    Спасибо,п***** с**** у меня после вашего демона ни один процеес не убивается и сервер не выключается
    shutdown -r now не работает и все процессы жрут 0% cpu,т.е. не работает

    1. administrator (Автор записи)

      Попробуйте убрать скрипт с автозагрузки. Если это невозможно сделать из своей системы, то можно воспользоваться любым Linux Live-CD.

  9. papont2007

    Спасибо! Буду терзать и дерзать.

  10. Серёга

    Спасибо 🙂

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Выполните действие! (обязательно) Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.