Улучшить работу высоконагруженных серверов можно:
- увеличив лимит открытых файлов,
увеличив максимальный лимит подключений к БД MySQL,
увеличив размер буфера для InnoDB в MySQL.
Установка лимита открытых файлов
Для установки лимита открытых файлов необходимо:
Проверить текущий лимит командой:
ulimit -a
Результат выполнения команды будет выведен на консоль.
По умолчанию лимит открытых файлов составляет1024
:
Данного лимита недостаточно для нормальной работы высоконагруженных серверов.Рекомендуется устанавливать лимит не меньше65536
.Установить лимит открытых файлов одним из способов:
Для каждого пользователя:
В файл/etc/security/limits.conf
добавить (или отредактировать, если лимиты были установлены ранее) следующие строки:Пример настройки* soft nproc 65536 * hard nproc 65536 * soft nofile 65536 * hard nofile 65536
Для всего сервера:
В файл/etc/sysctl.conf
добавить (или отредактировать, если лимиты были установлены ранее) следующие строки:Пример настройкиfs.file-max = 65536 fs.nr_open = 65536 ...
- Актуализировать конфигурационный файл каждого высоконагруженного сервиса. Для этого необходимо:
Создать файл
/etc/systemd/system/НАЗВАНИЕ_СЕРВИСА.service.d/limit.conf
и добавить в него следующую информацию:Пример настройки[Service] LimitNOFILE=количество_открытых_файлов_на_сервис
Перезапустить
demon-reload
командой:systemctl daemon-reload
Перезапустить сервис командой:
systemctl restart service
Установка максимального лимита подключений к БД MySQL
Для установки максимального лимита подключений к БД MySQL необходимо:
Проверить текущее значение командой в консоли MySQL:
show variables like "max_connections"
Результат выполнения команды будет выведен на консоль.
По умолчанию максимальный лимит подключений к БД MySQL составляет151
:
Данного лимита недостаточно для высоконагруженных серверов, из-за чего может возникать ошибка «too many connections
».Рекомендуется устанавливать лимит не меньше 400.Установить лимит подключений, добавив файл
/etc/mysql/mysql.conf.d/mysqld.cnf
в секцию [mysqld
] значение:Пример настройкиmax_connections = 400
Для вступления изменений в силу необходимо перезапустить сервер MySQL.
Установка размера буфера для InnoDB в MySQL
Для установки размера буфера для InnoDB в MySQL необходимо:
Оценить эффективность работы буфера командой в консоли MySQL:
show engine InnoDB status\G
Результат выполнения команды будет выведен на консоль в виде значений параметра "
Buffer pool hit rate
":
Первое значение должно быть не меньше1000
. В данном случае размера буфера для работы MySQL достаточно.
Если первое значение меньше1000
(например "995/1000
" или "990/1000
"), то это означает, что не все операции чтения работают с буфером, и MySQL получает часть данных через операцию чтения из файла.В таком случае рекомендуется увеличить буфер до60-70%
от ОЗУ.Установить размер буфера MySQL, добавив в конец файла
/etc/mysql/mysql.conf.d/mysqld.cnf
параметр с необходимым значением. Например:Пример настройкиinnodb_buffer_pool_size = 15GB
Для вступления изменений в силу необходимо перезапустить сервер MySQL.