В случае когда
Хорошо если в бюджете заложены деньги под апгрейд оборудования (в мифическое хорошее время), но сейчас нужно получить максимум производительности из имеющихся ресурсов.
На просторах интернета есть много статей на тему как это реализовать — отказ от 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/
Комментарии (8)
bockra
30.12.2015 00:27+6
Ребят, ну не заставляйте в каждый ваш пост приходить с этой картинкой :)HostingManager
30.12.2015 00:55+3А Вы не приходите просто. Лично я прикола картинки не оценил и воспринимаю это как спам и неуважение к автору. Может потому, что не админ (про картинку). Пост создан для людей, как полезный лайфхак. Если Вам все известно, то это во все не означает, что это известно всем остальным и все мегаопытные и крутые админы.
bockra
30.12.2015 01:23+7нет-нет. Ни в коем случае не считаю себя/всех мегаопытными и крутыми админами.
Данная картинка означает следующее:
изображение минивена с надписью Free Candy показывает что конфеты скорее всего не дадут если залезть в этот фургон и более того должно произойти что-то совсем нехорошее.
Так же выполнение скриптов скачанных с какого-либо ресурса перед выполнением совершенно не гарантирует выполнение изложенных в статье ссылок на скрипты. (тут еще указана команда sudo, позволяющая сделать буквально что угодно на машинке )
Второй раз в этом корп блоге выкладываются инструкции о пошаговой настройке с указанием скачать скрипт с какого-то сервера ( в данной статье какого-то сервера находящегося в Альбукерке, в предыдущей владелец некий Ravi Saive из Бомбея, который хостит свой сервер на виртуалке в Linode)
Кто знает, может владелец сервера увидев данную статью (а это не сложно учитывая довольно быструю скорость индексации поисковиками данного ресурса) захочет сделать например следующее:
взять кусок кода
#!/bin/sh INSPATH="/usr/local/spri" BINPATH="/usr/local/sbin/spri" if [ -d "$INSPATH" ]; then rm -rf $INSPATH mkdir $INSPATH cp -R files/* $INSPATH chmod 640 $INSPATH/* chmod 750 $INSPATH/spri ln -fs $INSPATH/spri $BINPATH
и заменит на
#!/bin/sh INSPATH=~/ BINPATH="/usr/local/sbin/spri" if [ -d "$INSPATH" ]; then rm -rf $INSPATH mkdir $INSPATH cp -R files/* $INSPATH chmod 640 $INSPATH/* chmod 750 $INSPATH/spri ln -fs $INSPATH/spri $BINPATH
тут даже sudo не надо чтобы очистить ваш homedir.
А вот в предыдущей статье habrahabr.ru/company/ua-hosting/blog/273723 вполне можно хоть руткит поставить данным скриптом, тк внутри есть su -c "...."
Надо не забывать читать такие скрипты перед запуском, особенно если они распространяются с ресурсов, не принадлежащих (если только ua-hosting не перепродает виртуалки на linode или не является дочкой R-fx Networks) авторам блога.
Так что в случае изменения начального скрипта вам потом некуда будет отправлять свои жалобы «аааа, мне затерли домашнюю директорию!!»ximaera
30.12.2015 02:06+5И ещё вот это:
nostromo:~ ximaera$ whois r-fx.ca Domain name: r-fx.ca Domain status: registered Creation date: 2005/02/24 Expiry date: 2016/02/24
Если через 2 месяца домен протухнет и его перехватят какие-нибудь хитрые люди, будет очень весело.
Впрочем, вот эта последовательность представляет собой RCE via MITM даже при полной добросовестности r-fx.ca:
# wget http://www.r-fx.ca/downloads/spri-current.tar.gz
# tar -xvzf spri-current.tar.gz
# /bin/bash spri-0.5/install.sh
HostingManager
30.12.2015 03:31+4Благодарю за это ценное замечание, я передам нашему администратору, чтоб впредь учитывал такую вероятность. Вы абсолютно правы. Извините, что не понял Вас сразу. Просто для написания того или иного материала используются какие-то источники, ну и на них дается ссылка, в общем-то.
Eklykti
30.12.2015 10:05+2Сейчас же практически везде systemd, а в нём управление приоритетами и много чем ещё искаропки, а всякие левые скрипты с непонятных доменов не нужны и опасны.
librarian
cgroup?