- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

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

Установка

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

# 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/ [6]

Автор: ua-hosting.company

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/sistemnoe-administrirovanie/107701

Ссылки в тексте:

[1] LAMP: https://ru.wikipedia.org/wiki/LAMP

[2] uWSGI: https://uwsgi-docs.readthedocs.org/en/latest/

[3] PHP акселератора: https://ru.wikipedia.org/wiki/%D0%90%D0%BA%D1%81%D0%B5%D0%BB%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80_PHP

[4] СУБД: https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85

[5] приоритетов: https://en.wikipedia.org/wiki/Nice_(Unix)

[6] SPRI: https://www.rfxn.com/projects/system-priority/

[7] LA: https://ru.wikipedia.org/wiki/Load_Average

[8] тут: http://www.r-fx.ca/downloads/spri-current.tar.gz

[9] Источник: http://habrahabr.ru/post/274297/