Оптимальная конфигурация Nginx для обработки тысяч запросов в течение нескольких секунд - PullRequest
6 голосов
/ 24 апреля 2020

Каковы оптимальные настройки для Nginx для одновременной обработки большого количества запросов?

Мой сервер настроен на Nginx и PHP7 .3 в Ubuntu 20.04 LTS. Приложение, которое работает, построено с Laravel 7.

Это моя текущая конфигурация:

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
    fastcgi_index index.php;
    fastcgi_buffer_size 14096k;
    fastcgi_buffers 512 14096k;
    fastcgi_busy_buffers_size 14096k;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
}

Параметры fastcgi, которые я поместил, я нашел через Google и настроил число до некоторой высокой значения.

Приложение выполняет следующие действия:

  • 1500 + пользователи онлайн
  • они получают вопрос с несколькими вариантами ответов, выдвигаемый напрямую через Pusher
  • они отвечают на вопрос все вместе почти сразу = 1 запрос к серверу через Ajax для каждого ответа
  • каждый раз, когда дается ответ, результаты выбираются с сервера для каждого пользователя

Все четыре шага могут быть выполнены в течение пары секунд.

Сервер не достигает пика ни в ЦП, ни в памяти, когда это делается, единственное, что происходит, это то, что некоторые пользователи получают тайм-аут 502 .

Похоже на проблему конфигурации сервера в Nginx.

Это статистика сервера в тот момент, когда это произошло:

  • Система: 25% , Процессор: 22%, дисковый ввод-вывод: 0% - доступно 8 процессоров r core
  • RAM: 1,79 ГБ - доступно 3 ГБ

Примечание: я отключил VerifyCsrfToken в Laravel для маршрутов, которые вызываются, чтобы предотвратить дополнительную нагрузку на сервер .

Что мне не хватает? Должен ли я также изменить некоторые настройки PHP -FPM? Если да, то для чего и для чего я могу это сделать?

Это то, что Nginx -ороговые журналы домена говорят мне:

2020/04/25 13:58:14 [error] 7210#7210: *21537 connect() to unix:/var/run/php/php7.3-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 54.221.15.18, server: website.url, request: "GET /loader HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.3-fpm.sock:", host: "website.url"

Настройки www.conf:

pm.max_children = 100
pm.start_servers = 25
pm.min_spare_servers = 25
pm.max_spare_servers = 50
pm.max_requests = 9000
;pm.process_idle_timeout = 10s;
;pm.status_path = /status

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

(11: Resource temporarily unavailable)

Это EAGAIN / EWOULDBLOCK, это означает, что nginx принял клиентские подключения, но не может подключиться к PHP -FPM UNIX сокет без блокировки (ожидание) и, вероятно, не глядя на исходный код nginx, nginx несколько раз пытался подключиться к указанному сокету UNIX, но не удалось, поэтому nginx выдает Connection refused.

Есть несколько способов решить эту проблему:

  1. увеличить listen.backlog значение конфигурации в вашей конфигурации пула PHP -FPM с соответствующей ей * 1017 Значения *, net.ipv6.tcp_max_syn_backlog и net.core.netdev_max_backlog в sysctl.
  2. создают несколько пулов php -pm, затем используют upstream nginx config для использования этих пулов.
0 голосов
/ 03 мая 2020

Изменить /etc/security/limits.conf, введите:

# vi /etc/security/limits.conf

Установить мягкое и жесткое ограничение для всех пользователей или nginx пользователя следующим образом:

nginx       soft    nofile   10000
nginx       hard    nofile  30000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...