• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

Любой человек связанный с веб-серверами будь-то сисадмин или владелец сайта стремиться максимально улучшить производительность своего сервера поскольку это важный аспект бизнеса в интернете. Пользователь возращается только на те сайты, где обслуживание проводится на высоком уровне и серфинг сайта не вызывает негативных эмоций. В первую очередь это внешний вид сайта, скорость его работы и безопасность клиентских данных. В этой статье мы затронем аспект оптимизации работы сервера. Ниже приведены основные моменты конфигурирования сервера под эту задачу:

  • Настройка ядра Linux
  • Конфигурирование iptables/ipset для фильтрации трафика
  • Отказ от веб-сервера Apache. Использование Nginx и php-fpm.
    Установка и настройка nginx+php-fpm
    Оптимизация настроек nginx
  • Тюнинг Mysql
  • Подключение сервиса Cloudflare для базовой защиты от DDOS

Материала которым хочу поделиться достаточно много, поэтому он разделен на несколько статей. В этой часити речь пойдет про оптимизацию работы ядра Linux.

Базовый Тюнинг Ядра Linux для тяжелых проектов

Ядро Linux в настоящее время имеет хорошие значения по умолчанию для sysctl, но всегда есть возможности для улучшения. Некоторые параметры могут использоваться для настройки производительности, другие могут быть критически важными для усиления безопасности.

sysctl - это интерфейс для просмотра и динамического изменения параметров в Linux и других операционных системах * NIX. В Linux большинство динамических настроек ядра можно изменить с помощью sysctl.

Изменение параметров по умолчанию может привести к повышенному потреблению ресурсов. Не стоит просто копировать и вставлять приведённые ниже параметры, обязательно обратитесь к документации при их использовании.

Посмотреть список текущих значений параметров ядра можно введя команду:

ipcs -l

Список текщих значений параметров ядра

В кратце опишем параметры . Для более детальной информации необходимо обратиться к справочным материалам.

В первом разделе указаны параметры сообщений в системе.

Параметр MSGMNI - количество очередей сообщений, параметр MSGMAX размер сообщения, которое можно поместить в очередь, а параметр MSGMNB влияет на размер очереди.

Для параметра MSGMAX нужно задать значение 64 Кбайта (то есть 65536 байт), а значение MSGMNB нужно увеличить до 65536.

В разделе - Shared Memory Limits (Лимиты общей памяти), предельное значение SHMMAX - максимальный размер в байтах общей памяти. Предельное значение SHMALL - это максимальное кол-во страниц совместно используемой памяти в системе.

Рекомендуется задать для SHMMAX значение, численно равное объему физической памяти в системе. Однако минимально необходимое в системах x86 значение равно 268435456 (256 Мбайт), а в 64-битных системах - 1073741824 (1 Гбайт).

Следующий раздел описывает количество семафоров, доступных для операционной системы.

Семофор это блокировки, которые переводят другие процессы в состояние ожидания. Параметр ядра sem состоит из четырех элементов: SEMMSL, SEMMNS, SEMOPM и SEMMNI. Значение SEMMNS равно произведению SEMMSL на SEMMNI. Подробней с ними можно ознакомиться в статье https://it.wikireading.ru/1834

Изменить параметры ядра, можно отредактировав файл /etc/sysctl.conf. Если этот файл не существует, создайте его.Ниже показаны примеры строк, которые нужно поместить в этот файл:

#Пример для сервера с 16 Гбайтами оперативной памяти:
kernel.shmmni=4096
kernel.shmmax=17179869184
kernel.shmall=8388608
#kernel.sem=   
kernel.sem=250 1024000 32 4096
kernel.msgmni=16384
kernel.msgmax=65536
kernel.msgmnb=65536

Еще полезные параметры ядра:

kernel.panic = 10

Автоматическая перезагрузка сервера после kernel panic

kernel.core_uses_pid = 1

Добавляет к имени файла дампа номер PID процесса

vm.swappiness = 20

Не использовать swap пока занятая озу не достигнет 80%

vm.dirty_ratio = 80

Максимальный объем системной памяти, которую можно заполнить dirty pages;

vm.dirty_background_ratio = 5

Процент системной памяти, который можно заполнить dirty pages до того, как фоновые процессы pdflush/flush/kdmflush запишут их на диск;

fs.file-max = 2097152

На серверах, некоторые из ваших приложений могут потребовать более высокийлимит для открытых дескрипторов файлов. Хорошим примером этого являются службы MySQL / MariaDB или веб-сервер Apache.

Вы можете увеличить лимит открытых файлов в Linux, отредактировав опцию ядра

net.core.netdev_max_backlog = 262144

Максимальный размер очереди пакетов для 10 гб или объединенных гигабитных линков /Минимальное значение должно быть равным количеству буферов на сетевом интерфейсе, что бы не вызвать переполнение. Рекомендуемое значение от 3000.

net.core.rmem_default = 31457280

Размер буфера поступающих и отправляемых данных сокета изменяется динамически, поэтому обычно в его изменении нет необходимости. Если же в ходе анализа производительности выяснилось, что скорость освобождения очереди сокета слишком низкая, можно увеличить ее длину. Для этого надо откорректировать следующие параметры:

net.core.rmem_max = 67108864
net.core.wmem_default = 31457280

Размер буфера приема данных по умолчанию для всех соединений.

net.core.wmem_max = 67108864
net.core.somaxconn = 65535

Максимальное число открытых сокетов, ждущих соединения. Имеет смысл увеличить значение по умолчанию.

net.core.optmem_max = 25165824

Теперь когда основные параметры ядра Linux разобраны давайте перейдем к настройке firewall.

Поддержка FREEhost.UA работает круглосуточно. Если во время настройки сервера у Вас возникнут вопросы, мы будем рады Вам помочь. У нас Вы можете арендовать виртуальный сервер на SSD и NVME дисках от 100 грн. в месяц.

 

Дата: 06.09.2019
Автор: Валерий

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA