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

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

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

Для начала стоит убедиться, что вы используете файловую систему 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, часть программы переносится на жесткий диск. Таким образом можно использовать больше ОЗУ, чем есть в системе. Ubuntu swap

Подход не имеет смысла в системах с большим объемом 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

Процессы

ubuntu processes

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

sudo aptitude install sysv-rc-conf

# Установка инструмента

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















После чистой установки 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.

Подпишитесь на Хайлоад с помощью Google аккаунта
или закройте эту хрень