El servidor deja de aceptar conexiones después de ~120.000 activas el 18.04.3

El servidor deja de aceptar conexiones después de ~120.000 activas el 18.04.3

Estoy ejecutando un tipo de prueba de rendimiento en la que tengo un servidor TCP simple con 4 direcciones IP que escucha en un puerto y obtiene conexiones de varias otras computadoras en la red local. Todo funciona bien hasta poco menos de 120.000 conexiones activas, los clientes pueden recibir mensajes del cliente y crear nuevas conexiones. Con poco menos de 120.000, las nuevas conexiones simplemente dejan de aparecer. No hay actividad de registro en el servidor y los clientes comienzan a tener tiempos de espera después de un tiempo. No hay ningún firewall que se interponga en el camino. Ya he modificado un montón de configuraciones:

/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

Los límites son intencionalmente excesivos porque es solo una prueba. ¿Me faltan otras configuraciones que permitirían más conexiones? Ni la CPU ni la RAM están bajo estrés, por lo que me gustaría seguir mejorando el hardware. Todos los servidores y clientes se ejecutan en instancias AWS EC2 t3a.xlarge, si eso hace alguna diferencia.

Respuesta1

Resulta que era una limitación de AWS. Aparentemente, hablar entre instancias EC2 dentro de la misma VPC tiene un límite de conexiones activas de alrededor de 120.000. Hacerles usar una IP pública para comunicarse eliminó el límite. No recibí ningún error en Ubuntu porque el sistema operativo no limitaba nada.

información relacionada