O servidor para de aceitar conexões após aproximadamente 120.000 ativas em 18.04.3

O servidor para de aceitar conexões após aproximadamente 120.000 ativas em 18.04.3

Estou executando um tipo de teste de desempenho onde tenho um servidor TCP simples com 4 endereços IP que está escutando em uma porta e obtendo conexões de vários outros computadores na rede local. Tudo funciona bem até pouco menos de 120.000 conexões ativas, os clientes são capazes de receber mensagens do cliente e criar novas conexões. Com pouco menos de 120 mil, novas conexões simplesmente param de aparecer. Não há atividade de log no servidor e os clientes começam a atingir o tempo limite depois de um tempo. Não há firewall que possa atrapalhar. Já ajustei várias configurações:

/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

Os limites são intencionalmente completamente exagerados porque são apenas um teste. Faltam algumas outras configurações que permitiriam mais conexões? Nem a CPU nem a RAM estão sobrecarregadas, então gostaria de continuar pressionando o hardware. Servidores e clientes estão todos em execução em instâncias t3a.xlarge do AWS EC2, se isso faz alguma diferença.

Responder1

Acontece que era uma limitação da AWS. Aparentemente, conversar entre instâncias EC2 dentro da mesma VPC tem um limite de conexões ativas de cerca de 120.000. Fazê-los usar um IP público para se comunicar eliminou o limite. Não estava recebendo nenhum erro no Ubuntu porque o sistema operacional não estava limitando nada.

informação relacionada