Я пытаюсь настроить среду с несколькими узлами (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"