Linux TCP性能调优
Eave
2017.04.07 15:34
一、优化Linux内核参数
vim /etc/sysctl.conf
在末尾增加以下内容
# 指定内核针对内存分配的策略
# 0、表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程
# 1、表示内核允许分配所有的物理内存,而不管当前的内存状态如何
# 2、表示内核允许分配超过所有物理内存和交换空间总和的内存
vm.overcommit_memory = 1
# 表示SYN队列的长度,默认为1024,加大队列长度,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog = 65536
# 开启路由转发功能
net.ipv4.ip_forward = 1
# 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
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接收缓冲的内存最大值。
net.ipv4.tcp_rmem = 4096 87380 4194304
# tcp_wmem:min表示为TCP socket预留用于发送缓冲的内存最小值,default为TCP socket预留用于发送缓冲的缺省内存值,max用于TCP socket发送缓冲的内存最大值。
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
# 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_syncookies = 1
# 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_tw_recycle = 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
# 在TCP保活打开的情况下,最后一次数据交换到TCP发送第一个保活探测包的间隔,即允许的持续空闲时长,或者说每次正常发送心跳的周期,默认值为7200s
net.ipv4.tcp_keepalive_time = 90
# 在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包次数,默认值为9(次)
net.ipv4.tcp_keepalive_intvl = 15
# 在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包的发送频率,默认值为75s
net.ipv4.tcp_keepalive_probes = 2
# 如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2 状态的时间。
net.ipv4.tcp_fin_timeout = 30
# 用于向外连接的端口范围
net.ipv4.ip_local_port_range = 1024 65535
# 系统所有进程一共可以打开的文件数量
fs.file-max = 65536
# 每进程能拥有的最多的内存区域,默认为 65536 内存异常处理
vm.max_map_count = 655360
使配置立即生效
sysctl -p
二、调整最大文件描述符
vim /etc/security/limits.conf
在"# End of file"上面添加如下
# 该语句表示:每一个用户的默认打开文件数是65536
* - nofile 65536