В случае когда стартап проект молодой и перспективный, но бюджет сильно ограничен — приходится выжимать максимум возможного с имеющихся ресурсов.
Хорошо если в бюджете заложены деньги под апгрейд оборудования (в мифическое хорошее время), но сейчас нужно получить максимум производительности из имеющихся ресурсов.
На просторах интернета есть много статей на тему как это реализовать — отказ от 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