Улучшить работу высоконагруженных серверов можно:
увеличив максимальный лимит подключений к БД 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:
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 необходимо:
Оценить эффективность работы буфера командой в консоли 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.