Странная пропускная способность NGINX при переключении с Apache
Системная информация (экземпляр AWS EC2 (m4.large) за ElasticBeanstalk):
Регион: США-Запад-1
Память: 8 ГБ
Процессор: 2 ядра / 2,4 ГГц
Версия PHP: 7.0.22 (ZTS) с FPM
Версия Nginx: 1.10.2
Существует API, используемый веб / мобильным / другим. Каждая конечная точка делает запросы к базе данных и использует кеш (APCu или Redis)
апаш
Apache обслуживает ~40 запросов в секунду. Задержка составляла ~500-1200 мс (зависит от конечной точки API).
Nginx
Тогда мы решили перейти на Nginx. Но столкнулся со странным поведением - пропускная способность снизилась до ~ 20 запросов в секунду. И время ожидания постоянно увеличивается (например: тест начинается с 300 мс и заканчивается>31000 мс)
/etc/nginx/nginx.conf:
user webapp;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 10000;
error_log /var/log/nginx/error.log;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
charset utf-8;
client_max_body_size 50m;
gzip on;
gzip_vary on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml application/json;
gzip_disable "MSIE [1-6]\.";
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream php {
server 127.0.0.1:9000;
}
include /etc/nginx/conf.d/*.conf;
index index.html index.htm;
}
/fpm/pools/www.conf:
[www]
user = webapp
group = webapp
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 75
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 35
pm.max_requests = 500
... the rest is default
Производительность измеряется Apache Jmeter с использованием пользовательских сценариев. Тесты выполняются из того же региона (другой экземпляр EC2).
статистика cURL:
lookup: 0.125
connect: 0.125
appconnect: 0.221
pretransfer: 0.221
redirect: 0.137
starttransfer: 0.252
total: 0.389
tcptraceroute также идеально подходит (1 мс)
Пожалуйста, порекомендуйте! Я не могу найти причину проблемы самостоятельно.. Спасибо!