哥哥的CSDN集 2012-12-06
vi /etc/sysctl.conf
#表示SYN队列的长度,默认为1024,加大队列长度,可以容纳更多等待连接的网络连接数。 net.ipv4.tcp_max_syn_backlog = 65536 #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目 net.core.netdev_max_backlog = 32768 #默认128,这个参数会影响到所有AF_INET类型socket的listen队列 net.core.somaxconn = 32768 #系统套接字写默认缓冲区 net.core.wmem_default = 8388608 #系统套接字读默认缓冲区 net.core.rmem_default = 8388608 #系统套接字读最大缓冲区 net.core.rmem_max = 16777216 #系统套接字写最大缓冲区 net.core.wmem_max = 16777216 #此参数与net.ipv4.tcp_wmem都是用来优化TCP接收/发送缓冲区,包含三个整数值,分别是:min,default,max: #tcp_rmem:min表示为TCP socket预留用于接收缓冲的最小内存数量,default为TCP socket预留用于接收缓冲的缺省内存数量,max用于TCP socket接收缓冲的内存最大值。 #tcp_wmem:min表示为TCP socket预留用于发送缓冲的内存最小值,default为TCP socket预留用于发送缓冲的缺省内存值,max用于TCP socket发送缓冲的内存最大值。 net.ipv4.tcp_rmem=4096 87380 4194304 net.ipv4.tcp_wmem=4096 16384 4194304 #时间戳可以避免序列号的卷绕。一个1Gbps 的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。 net.ipv4.tcp_timestamps = 0 #为了打开对端的连接,内核需要发送一个SYN 并附带一个回应前面一个SYN 的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量。 net.ipv4.tcp_synack_retries = 2 #在内核放弃建立连接之前发送SYN 包的数量 net.ipv4.tcp_syn_retries = 2 #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_tw_recycle = 1 #net.ipv4.tcp_tw_len = 1 #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭 net.ipv4.tcp_tw_reuse = 1 #确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页(通常是 4KB)。 net.ipv4.tcp_mem = 94500000 915000000 927000000 #这个值表示系统所能处理不属于任何进程的socket数量,当我们需要快速建立大量连接时,就需要关注下这个值了。 net.ipv4.tcp_max_orphans = 3276800 #如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2 状态的时间。 net.ipv4.tcp_fin_timeout = 30 #net.ipv4.tcp_keepalive_time = 120 #用于向外连接的端口范围 net.ipv4.ip_local_port_range = 1024 65535
让以上参数生效:
/sbin/sysctl -p
调整最大文件描述符:
vi /etc/security/limits.conf
添加:
* - nofile 1006154
重启后生效(使用ulimit-n查看)
各参数的值参考了http://dragonsoar.iteye.com/blog/1567771