Сергей Маликов
06.12.2019
2788

Ограничение процессов в Linux по ресурсам

В статье рассматривается использование утилит для ограничения загруженности процессора каким-либо процессом. На сервере ip телефонии утилиты можно использовать, например, для установки ограничений на процесс конвертации записей из одного звукового формата в другой. Утилита cpulimit позволяет ограничить процессорное время, предоставляемое какому-либо процессу. Ограничить процесс можно также изменением его приоритета, но в этом случае нельзя узнать точную […]

В статье рассматривается использование утилит для ограничения загруженности процессора каким-либо процессом. На сервере ip телефонии утилиты можно использовать, например, для установки ограничений на процесс конвертации записей из одного звукового формата в другой.

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

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

Cpulimit прерывает процесс (или группу процессов), если процессор загружен более установленного порога. Для управления процессами утилита посылает сигналы SIGSTOP(приостановка процесса) и SIGCOUNT(возобновление).

Установка:

Если не был установлен ранее репозиторий epel-release — необходимо установить:

yum install epel-release

Установка cpulimit:

yum install cpulimit

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

Загрузить процессор на 100% можно с помощью бесконечных действий, используя следующие утилиты: yes, /dev/zero, /dev/urandom.  Например, одной из следующих команд:

dd if=/dev/zero | zip -r > /dev/null  – бесконечная архивация нулей
 Загрузка процессора командой архивации данных из псевдоустройства /dev/zero, вывод в псевдоустройство /dev/null
Загрузка процессора командой архивации данных из псевдоустройства /dev/zero, вывод в псевдоустройство /dev/null

yes – бесконечный вывод ‘y’ на экран

 Загрузка процессора командой yes
Загрузка процессора командой yes

Обработка утилитой wc шаблона из бесконечно сгенерированных нулей

wc  /dev/zero
 Загрузка процессора обработкой утилиты wc шаблона из бесконечно сгенерированных нулей
Загрузка процессора обработкой утилиты wc шаблона из бесконечно сгенерированных нулей

Ограничив выполняющийся процесс с помощью cpulimit можно

  • по pid процесса с помощью опции –p или –pid()
  • по имени исполняемого файла c помощью опции -e или —exe
  • по пути к исполняемому файлу c помощью опции -P или —path
  • cpulimit —exe=zip —limit=1  – ограничение выполняющегося процесса в 1% по имени процесса(zip)
  • cpulimit —pid 24294 —limit 1  – ограничение выполняющегося процесса в 1% по pid процесса
  • cpulimit -l 1 dd if=/dev/zero | zip -r > /dev/null  – ограничение процесса в 1% и его запуск
 Загрузка процессора после его ограничения
Загрузка процессора после его ограничения

Другие поддерживаемые опции:

  • -b  —background – запуск в фоновом режиме
  • -c , —cpu – указание количества доступных процессорных ядер.
  • -q , —quiet – тихий режим.
  • -k , —kill — убить целевой процесс вместо его ограничения по процессорному времени.
  • -r , —restore — восстановить процесс, убитый с помощью флага -k.
  • -s , —signal – отправление сигнала наблюдаемому процессу. По умолчанию — SIGCONT.
  • -v , —verbose — показать статистику
  • -z , —lazy — выход, если нет подходящего целевого процесса или если он умирает
  • —      последняя опция CPUlimit. Все последующие опции будут адресованы другому приложению, которое будет запущено.

Например:

cpulimit  -l  35  —  lame -V3 «record.wav» «record.mp3»  запуск конвертации из wav в mp3 с помощью приложения lame с разрешением переменного битрейта, качеством 3/9  и ограничением по процессорному времени до 35%.

Утилита cputool позволяет контролировать загрузку цп каким-либо процессом и прерывать выполнение процесса, если загрузка превышает установленный предел.

yum install cputool

Также, нагрузим процессор, например, командой

yes

Для введения ограничений на запущенный процесс опцией —cpu-limit или –c  устанавливается процесс загруженности, опцией -p указывается PID процесса:

cputool --cpu-limit 30 -p 7228

Для дополнительного ограничения в 15% необходимо запустить утилиту повторно:

cputool --cpu-limit 15 -p 7228

Для ограничений группы процессов, например

pidof httpd

Необходимо использовать опцию –P:

cputool --cpu-limit 15 -P 7228

Параметр –l или —load-limit используется для указания максимальной загрузки системы (процесс или группа процессов при этом продолжат выполнение). Допускается указание дробных значений. В нижеприведенном примере конвертация запускается, только когда загрузка процессора не превышает 10.5%:

cputool --load-limit 10.5 --  lame -V3 "record.wav" "record.mp3"

Ulimit – утилита для ограничения системных ресурсов, доступных процессу – количество файлов, которые может открыть процесс; размер файла, который может создать пользователь; объем памяти, который может использоваться процессом.

Чтобы установленное значение ulimit сохранялось после перезагрузки, необходимо прописать эти ограничения в /etc/security/limits.conf.

Общий вид правил:

<domain> <type> <item> <item>

  • domain —пользователь, группа, или * для записи по умолчанию
  • type — вид ограничения: soft или hard.
  • item — ограничиваемый ресурс
  • item — значение

Просмотр установленных ограничений производится с помощью команды:

ulimit -a
 Просмотр установленных ограничений
Просмотр установленных ограничений

Установленные лимиты для процесса можно посмотреть командой:

cat /proc/7228/limits
 Просмотр лимитов, установленных для процесса
Просмотр лимитов, установленных для процесса

Вывести максимально возможное количество открытых файлов:

cat /proc/sys/fs/file-max
 Ограничение на количество открытых файлов
Ограничение на количество открытых файлов

Для увеличения максимально возможного количества открытых файлов (временно) необходимо выполнить:

sysctl -w fs.file-max=400000

Для увеличения максимально возможного количества открытых файлов (перманентно — значение сохранится после перезагрузки) необходимо открыть /etc/sysctl.conf и в файле изменить значение параметра fs.file-max = 400000

nano /etc/sysctl.conf
 Увеличение fs.file-max
Увеличение fs.file-max

После изменений в файле /etc/sysctl.conf необходимо выполнить команду для их применения

sysctl -p

Для увеличения числа открытых файлов для конкретного пользователя в  /etc/security/limits.conf необходимо добавить:

* soft nproc 400000
* hard nproc 400000
* soft nofile 400000
* hard nofile 400000

И перезагрузить систему.

После перезагрузки можно проверить установленный лимит командой

ulimit -n
Лимит числа открытых файлов
Лимит числа открытых файлов
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices