MyTetra Share
Делитесь знаниями!
Оптимизация сервера на Ubuntu
Время создания: 05.02.2018 10:03
Текстовые метки: highload ubuntu server
Раздел: Highload
Запись: Velonski/mytetra-database/master/base/1517807028v2dp1hx32n/text.html на raw.githubusercontent.com

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

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

Для начала стоит убедиться, что вы используете файловую систему 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.

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

Прежде чем начинать оптимизацию нужно провести диагностику системы и выявить слабые места. Бездумный тюнинг может только усугубить ситуацию. Выявить проблемные места при работе веб-сервера поможет профилирование Оптимизируйте настройки веб-сервера ( Nginx и Apache ), внедряйте HTTP/2.

 
MyTetra Share v.0.65
Яндекс индекс цитирования