Process priority, или попытка еще немного оптимизировать сервер

в 16:59, , рубрики: nice, priority queue, process priority, renice, spri, Блог компании ua-hosting.company, Настройка Linux, системное администрирование, метки: , , , ,
Process priority, или попытка еще немного оптимизировать сервер - 1

В случае когда стартап проект молодой и перспективный, но бюджет сильно ограничен — приходится выжимать максимум возможного с имеющихся ресурсов.
Хорошо если в бюджете заложены деньги под апгрейд оборудования (в мифическое хорошее время), но сейчас нужно получить максимум производительности из имеющихся ресурсов.

На просторах интернета есть много статей на тему как это реализовать — отказ от LAMP в пользу nginx+php-fpm или uWSGI (по надобности), тонкой их настройки (не забываем кэшировать статику), установки PHP акселератора, тюнинга СУБД (если используется), и другие полезные вещи.

Но даже при установке и грамотного выполнения всех пунктов можно еще немного оптимизировать работу сервисов.

Речь пойдет о задании приоритетов для процессов (man nice, man renice).

Ядро linux поддерживает градацию приоритетности процессов от -20 до +19 (отрицательное значение — высокий приоритет, положительное значение — низкий приоритет, 0 приоритет — дефолтное значение для пользовательских процессов).
SPRI — позволяет присваивать приоритет запуска сервисов, в зависимости от Ваших нужд, для улучшение работоспособности сервера.
При грамотной настройке возможно уменьшение LA сервера на 5-20%.

Установка

Скачиваем последний релиз тут.

# wget http://www.r-fx.ca/downloads/spri-current.tar.gz

Распаковываем архив

# tar -xvzf spri-current.tar.gz

Запускаем скрипт установки install.sh

# /bin/bash spri-0.5/install.sh

Скрипт будет установлен в директорию /usr/local/spri и будет создан симлинк на него /usr/local/sbin/spri, в cron будет добавлена запись не его выполнение каждые 45 минут(меняется по своему усмотрению и нуждам).

# less /etc/cron.d/spri 
*/45 * * * * root /usr/local/sbin/spri -q >> /dev/null 2>&1

Настройка

По умолчанию SPRI делит процессы на шесть категорий: low, low-med, med, med-high, high, rt (думаю разница в «важности» интуитивно понятна из названия).

Структура директории скрипта (/usr/local/spri)

  • spri — сам скрипт, который вызывается каждые 45 минут (смотрим в cron) и меняет приоритеты для демонов согласно своему настроению.
  • conf.spri — конфиг-файл в котором определяются приоритеты для групп и задан путь по которому берется информация о списках сервисов входящих в ту или иную группу.
  • ps.ignore — процессы, которые игнорируются.
  • директория prios — в ней хранятся файлы приоритетов групп (high, low, low-med, med, med-high, rt) с записанными в них сервисами.

Добавление, удаление сервиса из группы проводится путем редактирования нужного файла, к примеру /usr/local/spri/high.
Для просмотра приоритета можно воспользоваться утилитой top, значение в столбце NI

Запуск

Для применения изменений, внесенных в конфиг файлы групп, нужно запустить скрипт.
Он поддерживает два формата запуска — бесшумный и разговорчивый.

# spri 
SPRI 0.5 [spri@r-fx.org]
========================
-v      Show Output
-q      Hide Output

В cron прописан quite запуск, запуск с ключом -v удобен для составления общей картины текущих настроек (не слишком то удобно поочередно лазить по всем шести конфиг-файлам).

Так как сам скрипт применяется каждые 45 минут (если параметр не изменялся руками), нужно добавить его в автозапуск для старта после плановых и не очень ребутов.

Открываем файл rc.local

nano /etc/rc.local

и добавляем строку

/bin/bash /usr/local/sbin/spri -q

!добавить до строки exit 0, сохраняемся и выходим из текстового редактора.
!можно прописать и без полных путей — spri -q

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

*сайт проекта https://www.rfxn.com/projects/system-priority/

Автор: ua-hosting.company

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js