这里提及的参数是和IPv4网络有关的linux内核参数,我们可以将这些内核参数的值追加到linux系统的/etc/sysctl.conf文件中,然后使用如下命令使修改生效:
[root@bogon ~]# /sbin/sysctl -p
1、net.core.netdev_max_backlog参数
参数net.core.netdev_max_backlog表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目,一般默认值为128(可能不同的linux系统该数值也不同)。nginx服务器中定义的NGX_LISTEN_BACKLOG默认为511。我们可以将它调整一下:
net.core.netdev_max_backlog = 262144
2、net.core.somaxconn参数
该参数用于调节系统同时发起的TCP连接数,一般默认值为128.在客户端存在高并发请求的情况下,该默认值较小,肯那个导致连接超时或重传问题,我们可以根据实际需要结合并发请求数来调节此值。
net.core.somaxconn = 262144
3、net.ipv4.tcp_max_orphans参数
该参数用于设定系统中最多允许存在多少tcp套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,没有与用户文件句柄关联的tcp套接字符将立即被复位,同时给出警告信息。这个限制只是为了防止简单的DoS工具。一般在系统内存比较充足的情况下,可以增大这个参数的赋值:
net.ipv4.tcp_max_orphans = 262144
4、net.ipv4.tcp_max_syn_backlog参数
记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。一般在系统内存比较充足的情况下,可以增大这个参数的赋值:
net.ipv4.tcp_max_syn_backlog = 262144
5、net.ipv4.tcp_timestamps参数
该参数用于设置时间戳,可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉:
net.ipv4.tcp_timestamps = 0
6、net.ipv4.tcp_synack_retries参数
该参数用于设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数量。为了建立对端的连接服务,服务器和客户端需要进行三次握手,第二次握手期间,内核需要发送SYN并附带一个回应前一个SYN的ACK,一个参数主要影响这个过程,一般赋值为1,即内核放弃连接之前发送一次SYN+ACK包,可以设置其为:
net.ipv4.tcp_synack_retries = 1
7、net.ipv4.tcp_syn_retries参数
该参数的作用与上一个参数类似,设置内核放弃建立连接之前发送SYN包的数量,他的赋值和上个参数一样即可:
net.ipv4.tcp_syn_retries = 1