最大连接数
linux系统要修改 以及相关参数 ...
sysctl -w fs.file-max=2000500
sysctl -w fs.nr_open=2000500
sysctl -w net.nf_conntrack_max=2000500
ulimit -n 2000500
sysctl -w net.ipv4.tcp_mem='131072 262144 524288'
sysctl -w net.ipv4.tcp_rmem='8760 256960 4088000'
sysctl -w net.ipv4.tcp_wmem='8760 256960 4088000'
sysctl -w net.core.rmem_max=16384
sysctl -w net.core.wmem_max=16384
sysctl -w net.core.somaxconn=2048
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
sysctl -w /proc/sys/net/core/netdev_max_backlog=2048
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_tw_reuse=1
(4)SO_REUSEADDR允许立即重用处于TIME_WAIT状态下的端口(与BSD一致)。具体说明如下:在socket编程中调用close socket(或者close in linux)会触发四次挥手过程断开tcp连接。主动断开TCP连接的一方会进入TIME_WAIT状态等待2MSL的时间之后才会真正关闭,以确保对端接受到了第四次挥手的报文。如果服务器需要重启,在未设置SO_REUSEADDR时,有时候会出现bind失败的情况,原因就是因为服务器关闭的时候该端口会处在TIME_WAIT状态2MSL长的时间段,短则几十秒长则几分钟,这对服务器来说应该是比较严重的问题。在Linux下bind之前对套接字设置SO_REUSEADDR选项,那么就会在使处在TIME_WAIT状态下的端口被立即重新使用。在某些时候,将一个新的socket绑定在一个处于TIME_WAIT阶段的socket所对应的地址端口对会产生一些我们并不想要的、无法预料的负面影响,但幸运的是这些负面影响在实践中很少见到。
所有试图绑定在相同的地址端口组合的socket必须属于拥有相同用户ID的进程。所以一个用户无法从另一个用户那里“偷窃”端口。
对于设置了SO_REUSEPORT选项的socket,Linux kernel还会执行一些别的系统所没有的特别的操作:对于绑定于同一地址端口组合上的UDP socket,kernel尝试在它们之间平均分配收到的数据包;对于绑定于同一地址端口组合上的TCP监听socket,kernel尝试在它们之间平均分配收到的连接请求(调用accept()方法所得到的请求)。这意味着相比于其他允许地址复用但随机将收到的数据包或者连接请求分配给连接在同一地址端口组合上的socket的系统而言,Linux尝试了进行流量分配上的优化。比如一个简单的服务器进程的几个不同实例可以方便地使用SO_REUSEPORT来实现一个简单的负载均衡,而且这个负载均衡由kernel负责,对程序来说完全免费!