nginx не может выполнить много запросов

У меня есть вопрос о мелодии nginx.

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

Я создал bash-файл и использовал wget с переключателем bqO для выполнения.

Но у него есть проблема.

Когда количество запросов превышает 100. nginx не отвечает на другой запрос и застревает в загрузке до тех пор, пока не будет выполнен один запрос.

Однако я установил pm.max_children и установил worker_connections на 200.

Есть ли у вас какие-либо предложения для решения этой проблемы или есть какой-либо тюнер, как "MySQL Tuner" для настройки nginx.

мои конфиги: php-fpm55.conf:

pm = ondemand pm.max_children = 1024 pm.start_servers = 20 pm.min_spare_servers = 20 pm.max_spare_servers = 35 pm.max_requests = 256 pm.process_idle_timeout = 20

net.core.somaxconn = 4096

sysctl.conf:

  • net.ipv4.tcp_window_scaling = 1
  • net.core.rmem_max = 16777216
  • net.core.wmem_max = 16777216
  • net.ipv4.tcp_rmem = 4096 87380 16777216
  • net.ipv4.tcp_wmem = 4096 65536 16777216
  • net.ipv4.ip_local_port_range = 1024 65000

nginx.conf:

  • рабочий_процесс 8;
  • worker_rlimit_nofile 1024000;

События {

  • работники соединения 10240;
  • используйте epoll;
  • multi_accept on;

}

  • sendfile on;
  • keepalive_timeout 2;
  • types_hash_max_size 2048;
  • отключение сервера;
  • client_max_body_size 1024m;
  • client_body_buffer_size 128k;
  • имя_сервера_hash_bucket_size 128;
  • имя_сервера_hash_max_size 10240;
  • fastcgi_buffers 8 16k;
  • fastcgi_buffer_size 32k;
  • fastcgi_connect_timeout 300;
  • fastcgi_send_timeout 300;
  • fastcgi_read_timeout 300;

результат: ab -n 100 -c 10 myindex.php

Server Software:        nginx
Server Port:            80
Document Length:        3 bytes

Concurrency Level:      10
Time taken for tests:   21.128 seconds
Complete requests:      100
Failed requests:        32
   (Connect: 0, Receive: 0, Length: 32, Exceptions: 0)
Total transferred:      17500 bytes
HTML transferred:       515 bytes
Requests per second:    4.73 [#/sec] (mean)
Time per request:       2112.791 [ms] (mean)
Time per request:       211.279 [ms] (mean, across all concurrent requests)
Transfer rate:          0.81 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:    19 1334 2747.0    144   15734
Waiting:       19 1334 2747.0    144   15733
Total:         19 1334 2746.9    144   15734

Percentage of the requests served within a certain time (ms)
  50%    144
  66%    549
  75%   1281
  80%   1700
  90%   4095
  95%   8790
  98%  12579
  99%  15734
 100%  15734 (longest request)

2 ответа

Вы, кажется, одержимы настройкой nginx, даже не зная, какая часть вашей архитектуры самая медленная. Маловероятно, что nginx будет первым, кто настроится.

Поместите ваши цели fastcgi в один блок вверх по течению и добавьте $upstream_addr а также $upstream_response_time в ваш формат журнала. Если нет, добавьте $request_time к вашему формату журнала, затем сравните оба раза. Если они находятся близко друг к другу, ваше приложение является виновником. Если нет, то это либо nginx, либо ваша сеть.

Только после того, как вы получите эту информацию, она будет потенциально полезна для настройки nginx.

Может быть, вы заинтересованы в keepalive_requests? Значение по умолчанию 100, вы можете изменить его на более высокое значение

Другие вопросы по тегам