2016-10-31 11 views
1

Я загружаю тестовую коробку t2.micro, в которой nginx и postgrest работают в контейнерах докеров. Nginx выступает в качестве прокси-сервера перед postgrest. Если я перейти непосредственно к потоку (postgrest) я получить хороший график (пики при примерно 900/RPS) Если я пройти через Nginx, я получить этот вид графаПериодическое падение пропускной способности обратного прокси nginx, что это может быть?

enter image description here

Процессор не maxed out (только около 50%)

Это конфигурация nginx. Все, что прокомментировано, было опробовано без какого-либо воздействия. Я также играл со значениями employee_connections и сопутствующими вещами. Что может вызвать периодическое падение?

 
    worker_processes 2; 

    #worker_rlimit_nofile    2048; 
    events { 
     # multi_accept     on; 
     worker_connections    1024; 
     use        epoll; 
    } 
    http { 
     resolver 127.0.0.11 ipv6=off; 
     include mime.types; 
     #tcp_nodelay      off; 
     #tcp_nopush      on; 
     upstream postgrest { 
      server postgrest:3000; 
      keepalive 64; 
     } 
     server { 
      listen  80; 
      server_name localhost; 
      charset utf-8; 

      location /rest/ { 
       default_type application/json; 
       #proxy_buffering off; 
       proxy_pass http://postgrest/; # Reverse proxy to your PostgREST 
      } 
     } 
    } 
+0

График для латентности также интересен, он остается примерно вплоть до первой капли 10мса, то есть подскакивает до 1 секунды и в основном остается там, отражая чуток пропускной график, но он не приходит до 10 мс. Также нет ошибок, каждый запрос 200 OK –

+0

новая разработка. Если я сделаю контейнеры использующими хост-сеть, производительность будет хуже, падение достигнет почти 0. Кто-нибудь знает, как сравнить сетевые настройки для режима хоста и моста, чтобы узнать, какие параметры разные? –

ответ

1

Виновником были (tcp) настройки ядра tcp. При переходе через Nginx прокси система использовал все локальные порты затем все прекратилось (падение), пока старые соединения TCP не может быть полностью закрыты (они были в TIME_WAIT на 60-е годы) Tuning эти настройки удалены проблему

#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

 Смежные вопросы

  • Нет связанных вопросов^_^