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

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

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

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

制限

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

これは単なるテストなので、制限は意図的に完全に過剰になっています。接続を増やすために見逃している設定が他にもありますか? CPU も RAM も負荷がかかっていないので、ハードウェアをプッシュし続けたいと思います。サーバーとクライアントはすべて AWS EC2 t3a.xlarge インスタンスで実行されていますが、それが何か違いを生むかどうかはわかりません。

答え1

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

関連情報