Понижение приоритета программы. » IT FOundation – Поваренная книга системного администратора.
Только нужная и полезная документация. Регистрируйтесь, пишите, комментируйте!
18 июня 2009

Понижение приоритета программы.

опубликовано в Общая информация |

На загруженных системах  иногда возникает проблема с тем что скрипты забирают непозволительно много системных ресурсов ( к примеру это может быть как ваш скрипт бэкапа, так и ночной logrotate, обновление базы aide и т.п.)

Эту проблему возможно решить понижение приоритета скрипта в планировщике ввода/вывода CFQ, который включен в Linux ядро, начиная с версии 2.6.13, и используется по умолчанию начиная с 2.6.18.

Для этого существует 2  утилиты nine и ionice:

nice  -изменение приоритета при выполнении процессором,
формат комманды: nice -n “уровень приоритета”  комманда,
где “уровень приоритета” -  число в диапазоне от -20 (наибольший  приоритет у процесса) до +19 (наименьший  приоритет у процесса)

ionice  – изменение приоритета при операциях ввода/вывода,
формат комманды:  ionice -c класс -n приоритет комманда
кде “класс” возможен в 3-х значениях

* 1 (Real time) – планировщик дает выбранному процессу преимущество при доступе к диску, без обращения внимания на работу других процессов. Доступно 8 уровней приоритета [0-7];
* 2 (Best Effort) – класс, устанавливаемый по умолчанию для всех процессов, доступны те же 8 уровней приоритета;
* 3 (Idle) – получает право на использование жесткого диска только в том случае, если другая программа не требует диск, приоритеты на этом уровне не используются.
А приоритет – число от 0 до 7 (меньшее соответствует большему приоритету).

Теперь к примеру запустим скрипт бэкапа с пониженным приоритетом:

#  nice -n 19 ionice -c2 -n7 backup.sh

утилитой nice с самым низким приоритетом вызываем утилиту ionice cо 2 классом планировки
и самым низким уровнем приоритета (7).

Если процесс все равно мешает, можем на лету перевести его в idle режим:

ionice -c3 -p 1004

или изменить приоритет планировщика:

renice 19 -p 1004

Где 1004 – PID процесса.

PS:  с ядром 2.6 идет 4 различных планировщика ввода/вывода, для того чтобы проверить что активный планировщик у нас CFQ:

# dmesg | grep schedule
[ 0.200665] io scheduler noop registered
[ 0.200722] io scheduler anticipatory registered
[ 0.200780] io scheduler deadline registered
[ 0.200846] io scheduler cfq registered (default)

или
cat /sys/block/{DEVICE-NAME}/queue/scheduler



Написать комментарий


× шесть = 12