我正在尝试设置一个具有多个节点(1 个接收方 + 16 个发送方)的环境来建立1,000,000 (1M)
并发 TCP 连接。
使用此工具:https://github.com/Microsoft/ntttcp-for-linux
使用Ubuntu 1804
最新内核
目前,我很容易联系到262,156与 3 个以上发送方建立并发 TCP 连接。但此后,接收方似乎无法接受任何新的 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
答案1
以下是一些建议,请仔细检查您的可用资源。增加您的套接字描述符
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"