转载

Nginx针对IPv4的内核7个参数的配置优化

“这里提及的参数是和IPv4网络有关的Linux内核参数,我们可以将这些内核参数的值追加到Linux系统的 /etc/sysctl.conf 文件中,然后用 /sbin/sysctl -p 命令修改生效”

# net.core.netdev_max_backlog

参数net.core.netdev_max_backlog表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目。一般默认值为128。Nginx服务器中定义的NGX_LISTEN_BACKLOG默认为511,我们可以将它调整一下:
	net.core.netdev_max_backlog = 262144		#2的18次幂

# net.core.somaxconn

参数net.core.somaxconn用于调节系统同时发起的TCP连接数,一般值为128。在客户端存在高并发请求时,该默认值较小,可能会导致链接超时或者重传问题,我们可以根据实际需求结合并发请求数量来调节此值。
	net.core.somaxconn = 262114

# net.ipv4.tcp_max_orphans

参数net.ipv4.tcp_max_orphans用于设定系统中最对允许存在多少TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,没有与用户文件句柄关联的TCP套接字将立刻被复位,同时发出警告信息,这个限制知识为了防止简单的DoS(Denial of Service,拒绝服务)攻击,一般在系统内存比较充足的情况下,可以增大这个参数的赋值:
	net.ipv4.tcp_max_orphans =  262144

# net.ipv4.tcp_max_syn_backlog

参数net.ipv4.tcp_max_syn_backlog用于记录尚未收到客户端确认信息的连接请求的最大值,对于拥有128MB内存的系统而言,次参数的默认值为1024,对于小内存的系统则是128,。一般在系统内存比较充足的情况下,可以调大这个参数的赋值:
	net.ipv4.tcp_max _syn_backlog = 262114

# net.ipv4.tcp_max_timestamps

参数net.ipv4.tcp_max_timestamps用于设定时间戳,这个可以避免序列号的卷绕。在一个1Gb/s的链路上,遇到以前用过的序列号的概率很大,当赋值为0时,禁用对于TCP时间戳的支持,在默认情况下,TCP协议会让内核接受这种“异常”的数据包,针对Nginx服务器来说,建议将其关闭:
	net.ipv4.tcp_max_timestamps = 0

# net.ipv4.tcp_synack_retries

参数net.ipv4.tcp_synack_retries用于设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数量,为了建立对端的连接服务,服务器和客户端需要进行三次握手,第二次握手期间,内核需要发送SYN并附带一个回应前一个SYN的ACK,这个参数主要影响这个过程,一般赋值为1,即内核放弃连接之前发送一次SYN+ACK包,可以设置其为:
	net.ipv4.tcp_synack_retries = 1

# net.ipv4.tcp_syn_retries

参数net.ipv4.tcp_syn_retries与上一个参数类似,设置内核放弃建立连接之前发送SYN包的数量,他的赋值和上个参数一样即可:
	net.ipv4.tcp_syn_retries = 1

内容来源:《Nginx高性能web服务器详解》

nginx优化
运维那些事
  • 作者:JackLiu
  • 发表时间:2020-12-09 03:25:43
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公共号二维码

评论列表