内容主要从网络上摘抄的,稍作了一下整理
来源1:
http://www.cnblogs.com/alli/archive/2011/01/11/1932599.html
1.进程打开文件数限制
ulimit –n ==》 ulimit –n 1000000
这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中还得除去每个进程必然打开的标准输入,标准输出,标准错误,服务器监听socket,进程间通讯的unix域socket等文件,那么剩下的可用于客户端socket连接的文件数就只有大概1024-10=1014个左右。也就是说缺省情况下,基于Linux的通讯程序最多允许同时1014个TCP并发连接。
典型现象:当connect,accpet 1000个左右连接后开始失败。
2、网络内核对TCP连接的有关限制
2.1 端口号范围限制
net.ipv4.ip_local_port_range = 1025 65000
到同一个主机的连接,超过端口用完后就会失败,这就是我们经常在网上看到的,说客户端最多只能向服务器发起6万多个连接。
2.2 iptable netfilter
第二种无法建立TCP连接的原因可能是因为Linux网络内核的IP_TABLE防火墙对最大跟踪的TCP连接数有限制。此时程序会表现为在connect()调用中阻塞,如同死机,如果用tcpdump工具监视网络,也会发现根本没有TCP连接时客户端发SYN包的网络流量。
net.ipv4.ip_conntrack_max = 10240
3.进程号
cat /proc/sys/kernel/pid_max
But you can change that too; on a 32-bit machine that'd be 2**22 as an absolute upper limit,
so:% sudo bash -c 'echo 4194303 > /proc/sys/kernel/pid_max'
4. tcp 协议栈参数
待续...