Периодическое падение пропускной способности обратного прокси-сервера nginx, что это может быть?
Я нагрузочно тестирую коробку t2.micro, в которой nginx и postgrest работают в док-контейнерах. Nginx действует как прокси перед postgrest. Если я перейду прямо к апстриму (postgrest), я получу хороший график (с пиковыми значениями около 900 / об / с). Если я пройду через nginx, я получу такой график
Процессор не максимально (только около 50%)
Это используемый конфиг nginx. Все, что прокомментировано, было опробовано без последствий. Я также играл со значениями worker_connections и связанных вещей. Чем может быть вызвано это периодическое падение?
рабочий_процесс 2; #worker_rlimit_nofile 2048; События { # multi_accept on; рабочий_соединения 1024; использовать epoll; } http { resolver 127.0.0.11 ipv6= выкл; включить mime.types; #tcp_nodelay off; #tcp_nopush on; вверх по течению postgrest { почтовый сервер:3000; keepalive 64; } сервер { слушать 80; имя_сервера localhost; кодировка utf-8; место / отдых / { default_type application/json; #proxy_buffering off; proxy_pass http://postgrest/; # Обратный прокси к вашему PostgREST } } }
1 ответ
Виновником были (tcp) настройки ядра (по умолчанию). При прохождении через прокси-сервер nginx система использовала все локальные порты, затем все останавливалось (сбрасывалось), пока старые соединения tcp не могли быть полностью закрыты (они находились в time_wait в течение 60 с). Настройка этих настроек устранила проблему.
#tcp settings
net.core.somaxconn
net.ipv4.tcp_fin_timeout
net.ipv4.tcp_tw_reuse
net.ipv4.ip_local_port_range
#nginx configs
proxy_set_header Connection "";
proxy_http_version 1.1;
В статье ниже более подробно рассказывается о том, что именно происходит, о параметрах для настройки.
https://engineering.gosquared.com/optimising-nginx-node-js-and-networking-for-heavy-workloads