Der Server akzeptiert keine Verbindungen mehr, nachdem am 18.04.3 ~120.000 aktiv waren.

Der Server akzeptiert keine Verbindungen mehr, nachdem am 18.04.3 ~120.000 aktiv waren.

Ich führe eine Art Leistungstest durch, bei dem ich einen einfachen TCP-Server mit 4 IP-Adressen habe, der auf einem Port lauscht und Verbindungen von mehreren anderen Computern im lokalen Netzwerk erhält. Bis zu knapp 120.000 aktiven Verbindungen funktioniert alles einwandfrei, Clients können Nachrichten vom Client empfangen und neue Verbindungen herstellen. Bei knapp 120.000 werden einfach keine neuen Verbindungen mehr angezeigt. Es gibt keine Protokollaktivität auf dem Server und die Clients bekommen nach einer Weile Timeouts. Es gibt keine Firewall, die im Weg wäre. Ich habe bereits eine Reihe von Einstellungen optimiert:

/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

Die Grenzwerte sind absichtlich völlig übertrieben, da es sich nur um einen Test handelt. Gibt es noch andere Einstellungen, die ich übersehen habe und die mehr Verbindungen ermöglichen würden? Weder die CPU noch der RAM werden beansprucht, daher möchte ich die Hardware weiter auslasten. Server und Clients laufen alle auf AWS EC2 t3a.xlarge-Instanzen, falls das einen Unterschied macht.

Antwort1

Es stellte sich heraus, dass es eine AWS-Einschränkung war. Anscheinend gibt es für die Kommunikation zwischen EC2-Instanzen innerhalb derselben VPC ein aktives Verbindungslimit von etwa 120.000. Indem man sie dazu brachte, eine öffentliche IP-Adresse für die Kommunikation zu verwenden, wurde das Limit aufgehoben. Ich bekam in Ubuntu keine Fehler, weil das Betriebssystem nichts einschränkte.

verwandte Informationen