Улучшить работу высоконагруженных серверов можно:

  • увеличив лимит открытых файлов,
  • увеличив максимальный лимит подключений к БД MySQL,

  • увеличив размер буфера для InnoDB в MySQL.

Установка лимита открытых файлов

Для установки лимита открытых файлов необходимо:

  1. Проверить текущий лимит командой:

    ulimit -a

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

    Данного лимита недостаточно для нормальной работы высоконагруженных серверов.

    Рекомендуется устанавливать лимит не меньше 65536.
  2. Установить лимит открытых файлов одним из способов:

    • Для каждого пользователя:
      В файл /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
      ...
  3. Актуализировать конфигурационный файл каждого высоконагруженного сервиса. Для этого необходимо:
    1. Создать файл /etc/systemd/system/НАЗВАНИЕ_СЕРВИСА.service.d/limit.conf и добавить в него следующую информацию:

      Пример настройки
      [Service]
      LimitNOFILE=количество_открытых_файлов_на_сервис
    2. Перезапустить demon-reload командой:

      systemctl daemon-reload
    3. Перезапустить сервис командой:

      systemctl restart service

Установка максимального лимита подключений к БД MySQL

Для установки максимального лимита подключений к БД MySQL необходимо:

  1. Проверить текущее значение командой в консоли MySQL:

    show variables like "max_connections"

    Результат выполнения команды будет выведен на консоль.
    По умолчанию максимальный лимит подключений к БД MySQL составляет 151:

    Данного лимита недостаточно для высоконагруженных серверов, из-за чего может возникать ошибка «too many connections».

    Рекомендуется устанавливать лимит не меньше 400.
  2. Установить лимит подключений, добавив файл /etc/mysql/mysql.conf.d/mysqld.cnf в секцию [mysqld] значение:

    Пример настройки
    max_connections = 400
  3. Для вступления изменений в силу необходимо перезапустить сервер MySQL.

Установка размера буфера для InnoDB в MySQL

Для установки размера буфера для InnoDB в MySQL необходимо:

  1. Оценить эффективность работы буфера командой в консоли MySQL:

    show engine InnoDB status\G

    Результат выполнения команды будет выведен на консоль в виде значений параметра "Buffer pool hit rate":

    Первое значение должно быть не меньше 1000. В данном случае размера буфера для работы MySQL достаточно.
    Если первое значение меньше 1000 (например "995/1000" или "990/1000"), то это означает, что не все операции чтения работают с буфером, и MySQL получает часть данных через операцию чтения из файла.

    В таком случае рекомендуется увеличить буфер до 60-70% от ОЗУ.
  2. Установить размер буфера MySQL, добавив в конец файла /etc/mysql/mysql.conf.d/mysqld.cnf параметр с необходимым значением. Например:

    Пример настройки
    innodb_buffer_pool_size = 15GB
  3. Для вступления изменений в силу необходимо перезапустить сервер MySQL.

  • No labels