Назад | Перейти на главную страницу

как достичь 1M одновременных TCP-соединений?

Я пытаюсь настроить среду с несколькими узлами (1 получатель + 16 отправителей), чтобы установить 1,000,000 (1M) одновременные TCP-соединения.

Используя этот инструмент: https://github.com/Microsoft/ntttcp-for-linux

С помощью Ubuntu 1804 с последним ядром

В настоящее время до меня легко добраться 262 156 одновременные TCP-соединения с 3+ отправителями. но после этого кажется, что получатель не может принимать новые TCP-соединения.

Есть ли какая-нибудь конфигурация в Linux, которую я могу настроить для создания 1M TCP-соединений?

Что я наделал:

ulimit -n 1024000
./ntttcp -P 64 -M -e    ### '-e' to use epoll()

Я запускаю эту команду на стороне получателя, чтобы отслеживать количество TCP-соединений:

ss -ta | grep ESTA | wc -l
ulimit -n 1024000
echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
./ntttcp -s10.0.0.4 -P 64 -n 10 -l 100    ### 64,000 concurrent TCP connections from one sender

Вот несколько предложений, пожалуйста, внимательно проверьте доступные ресурсы. Удалите дескрипторы сокетов

ulimit -n 20000500

увеличить максимальное количество дескрипторов сокетов на процесс до значения, превышающего текущий максимум ядра (fs.nr_open)

echo 20000500 > /proc/sys/fs/nr_open

эфемерные порты от 500 до максимального теоретического предела 65 536 - сохраняются только порты от 1 до 500, зарезервированные для операционной системы

sysctl -w net.ipv4.ip_local_port_range="500   65535"

Изменение дескриптора клиентского сокета

echo 3000000 > /proc/sys/fs/nr_open
ulimit -n 2000000

echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
sysctl -w net.ipv4.tcp_mem="383865   511820   2303190"
sysctl -w net.ipv4.tcp_rmem="1024   4096   16384"
sysctl -w net.ipv4.tcp_wmem="1024   4096   16384"
sysctl -w net.ipv4.tcp_moderate_rcvbuf="0"