Я запускаю своего рода perf-тест, где у меня есть простой 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
Ограничения намеренно полностью избыточны, потому что это всего лишь тест. Есть ли какие-то другие настройки, которые я упускаю, чтобы включить больше подключений? Ни ЦП, ни ОЗУ не нагружаются, поэтому я хотел бы продолжать нагружать оборудование. Сервер и клиенты работают на экземплярах AWS EC2 t3a.xlarge, если это имеет значение.
решение1
Оказалось, что это было ограничение AWS. Видимо, общение между экземплярами EC2 внутри одного VPC имеет ограничение на активные соединения около 120 000. Заставив их использовать публичный IP для связи, мы избавились от ограничения. Я не получал никаких ошибок в Ubuntu, потому что ОС ничего не ограничивала.