2016-10-31 5 views
1

nginxとpostgrestがdockerコンテナで実行されているt2.microボックスの負荷テストを行っています。 Nginxはpostgrestの前でプロキシとして機能します。私は素敵なグラフを取得し、上流(postgrest)に直接行く場合、私はnginxの通過する場合 (約900/RPSのピークが)、私はグラフのこの種を取得 nginxリバースプロキシのスループットが定期的に低下しますが、それは何ですか?

enter image description here

CPUではありません最大値(約50%のみ)

これは使用されるnginx設定です。コメントされたものは何も影響を与えずに試されました。私はworker_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

潜伏するためのグラフでも面白いです、それはおよそ10msの最初の一滴までアップのまま、次に約1秒にジャンプされ、主にそこにとどまり、ビットにスループットのグラフをミラーリングが、それは付属していません。 10msに戻ります。 また、エラーはありません、すべての要求は200 OK –

+0

新しい開発です。コンテナにホストネットワークを使用させると、パフォーマンスは悪化し、ドロップはほぼ0になります。 ホストとブリッジのネットワーク設定を比較する方法を知っている人はいますか? –

答えて

1

原因は(デフォルトの)カーネルTCP設定です。 システムは、すべてのローカルポートを使用していたnginxのプロキシを経由し、その後すべてが チューニングこれらの設定は、問題を取り除い古いTCP接続が完全に閉じることができるようになるまで(彼らは60年代のためTIME_WAITにあった)(ドロップ)を停止

#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

関連する問題