Linux TCP参数
程序员文章站
2022-03-15 21:16:19
...
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 查看)
各参数的值参考了[url]http://dragonsoar.iteye.com/blog/1567771[/url]