web-dev-qa-db-ja.com

18.04.3で〜120,000がアクティブになると、サーバーは接続の受け入れを停止します

私は単純なTCPサーバーが4つのIPアドレスを持ち、ポートでリッスンしていて、ローカルネットワーク上の他の複数のコンピューターから接続を取得しているような種類のパフォーマンステストを実行しています。すべて正常に動作します。最大120,000未満のアクティブな接続では、クライアントはクライアントからメッセージを取得して新しい接続を作成できます。120,000未満では、新しい接続が表示されなくなります。サーバー上でログアクティビティがなく、クライアントは少し後にタイムアウトを開始します。邪魔になるファイアウォールはありません。既にいくつかの設定を調整しました。

/ etc/sysctl.conf

net.core.netdev_max_backlog = 1000000

net.core.netdev_budget = 50000
net.core.netdev_budget_usecs = 5000

net.core.somaxconn = 1024000

net.core.rmem_default = 1048576
net.core.rmem_max = 16777216

net.core.wmem_default = 1048576
net.core.wmem_max = 16777216

net.core.optmem_max = 65536

net.ipv4.tcp_rmem = 4096 1048576 2097152
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_max_syn_backlog = 3000000
net.ipv4.tcp_max_tw_buckets = 2000000

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 6
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1

/ etc/security/limits.conf

* soft nofile 6553600
* hard nofile 6553600
cat /proc/sys/fs/file-max
1621708

制限は単なるテストであるため、意図的に完全に過剰に制限しています。より多くの接続を可能にする他の設定が欠けていますか? CPUもRAM=もストレスを受けていないので、ハードウェアをプッシュし続けたいと思います。サーバーとクライアントはすべてAWS EC2 t3a.xlargeインスタンスで実行されています。

4
Denis

AWSの制限であることがわかりました。どうやら同じVPC内のEC2インスタンス間での通信には、約120,000のアクティブな接続制限があります。パブリックIPを使用して通信するようにすると、制限がなくなりました。 OSが何も制限していなかったため、Ubuntuでエラーが発生していませんでした。

2
Denis