Рубріки: HighloadТеория

Оптимизация сервера на Ubuntu

Игорь Грегорченко

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

Файловая система

Для начала стоит убедиться, что вы используете файловую систему ext4:

df -T
# Вывод будет похожим на:
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/vda1 ext4 20511592 2494920 16960708 13% /
tmpfs tmpfs 250152 0 250152 0% /dev/shm
tmpfs tmpfs 5120 0 5120 0% /run/lock

Будет отображаться в столбце Type

Если же файловая система Ext3, то рекомендуется перевести ее в Ext4 — более производительную и улучшенную версию.

Виртуальная память

Для выполнения трудоемких задач используется виртуальная память (swap) — когда заполняется RAM, часть программы переносится на жесткий диск. Таким образом можно использовать больше ОЗУ, чем есть в системе.

Подход не имеет смысла в системах с большим объемом RAM, тем более, что оперативная память быстрее постоянной. Swap также не рекомендуется использовать на сервере с SSD-дисками — он существенно снижает срок службы хранилища (частые процессы записи и чтения).

Ubuntu по умолчанию выгружает данные при заполнении ОЗУ на 40%.

Для настройки swap используется параметр vm.swappiness, значение которого нужно вписать или отредактировать в файле конфигурации sysctl.conf:

nano /etc/sysctl.conf
# Добавить строчку
vm.swappiness=10

Файл подкачки задействуется только если свободно 10% оперативной памяти

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

sysctl -p
# Или
sysctl -a | grep vm.swappiness

В первом случае применяет выводит все параметры файла, во втором — выбирает нужный параметр среди всех возможных переменных

Кэширование позволяет улучшить производительность системы. Но если веб-сервер производит большое количество операций чтения/записи, то дополнительное кэширование может замедлять I/O.

Параметры кэширования можно настроить:

$ sysctl -a | grep dirty
vm.dirty_background_ratio = 10
vm.dirty_background_bytes = 0
vm.dirty_ratio = 20
vm.dirty_bytes = 0
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000

Параметры, отвечающие за dirty pages — данные, которые нужно записать на диск или отправить в swap

Параметры значат:

  • vm.dirty_background_ratio — процент системной памяти, который можно заполнить dirty pages до того, как фоновые процессы pdflush/flush/kdmflush запишут их на диск;
  • vm.dirty_ratio — максимальный объем системной памяти, которую можно заполнить dirty pages;
  • vm.dirty_background_bytes и vm.dirty_bytes — два предыдущих пункта, только в байтах; параметры взаимозаменяемы;
  • vm.dirty_expire_centisecs – время, которое данные могут храниться в кэше, в нашем случае 30 с;
  • vm.dirty_writeback_centisecs – как часто процессы pdflush/flush/kdmflush проверяют кэш.

Количество данных, которые ожидают записи можно просмотреть так:

cat /proc/vmstat | egrep "dirty|writeback"

nr_dirty 878
nr_writeback 0
nr_writeback_temp 0

878 “грязных” страниц ожидает записи

Чтобы уменьшить размер кэша для уменьшения вероятности потери важных данных при сбое и минимизации возможных задержек записи/чтения необходимо отредактировать параметры vm.dirty_background_ratio и vm.dirty_ratio:

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

Значения записываются sysctl.conf

IPv6

Смешанная среда IPv4/IPv6 может вносить сбои в работу подключенных к Сети программ из-за непреднамеренного взаимодействия протоколов. К примеру при неудачной попытке подключения apt или ssh к сети IPv6, несовместимости устройств.

Для отключения IPv6 нужно выполнить:

sudo sh -c 'echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6'

Временное отключение IPv6 на всех интерфейсах

А для перманентного отключения протокола нужно отредактировать файл /etc/sysctl.conf:

# Отключение на всех интерфейсах
net.ipv6.conf.all.disable_ipv6 = 1

# Отключение на определенном интерфейсе
net.ipv6.conf.eth0.disable_ipv6 = 1

Для применения новых параметров достаточно ввести sudo sysctl -p /etc/sysctl.conf

Процессы

Фоновые процессы могут серьезно “засорить” системную память. На помощь придет утилита sysv-rc-conf:

sudo aptitude install sysv-rc-conf
Установка инструмента

sysv-rc-conf позволяет отключать ненужные сервисы для ускорения и оптимизации ресурсов системы.

После чистой установки Ubuntu Server содержит минимум сервисов, только самое нужное. Но если сервер используется длительное время, то список процессов может быть обширным и будет зависеть от программ, которые вы сами устанавливали.

Если же используется десктопная версия, то вот небольшой список сервисов, которые можно отключить (если система работает в качестве сервера):

  • alsa и alsa-utils — звуковые подсистемы;
  • atd — планировщик, не нужен, если есть cron;
  • bluez-utiles — служба Bluetooth;
  • cupsys — подсистема управления принтером;
  • dns-clean — служба очистки DNS при использовании dial-up;
  • fetchmail — служба доставки электронной почты;
  • gdm — менеджер рабочего стола (GUI);
  • gdomap — служба поддержки GNUstep;
  • hibernate — служба гибернации;
  • hotkey-setup — поддержка горячих клавиш;
  • hotplug и hotplug-net — горячее подключение устройств;
  • ifrename — служба именования сетевых интерфейсов;
  • laptop-mode — режим ноутбука, не нужен на сервере;
  • ppp и ppp-dns — службы для соединения через модем;
  • winbind, smbd и nmbd — часть Samba, нужен для общего доступа с устройствами под Windows.

Главная рекомендация — не отключайте неизвестные процессы, пользуйтесь мануалом и Google.

Самое главное

Прежде чем начинать оптимизацию нужно провести диагностику системы и выявить слабые места. Бездумный тюнинг может только усугубить ситуацию. Выявить проблемные места при работе веб-сервера поможет [http://ruhighload.com/index.php/tag/%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 профилирование]. Оптимизируйте настройки веб-сервера (Nginx и Apache), внедряйте HTTP/2.

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

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023