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, вы можете изменить его на более высокое значение