由于默认的Linux内核参数考虑的是最常见的场景,显然不符合用于支持高并发访问的web服务器的定义,所以需要修改Linux内核参数,是Nginx可以有更高的性能;在优化内核时,可以做很多事情。但是,我们通常会根据业务特点进行调整。当Nginx作为静态网页内容服务器,反向代理,或者提供压缩服务器的服务器时,expect内核参数的调整是不同的,这里简单配置一下最常见的TCP网络参数,让Nginx支持更多并发请求;首先,您需要修改/etc/sysctl.conf以更改内核参数。fs.file-max=999999#表示单个进程最多可以打开的句柄数;net.ipv4.tcp_tw_reuse=1#参数设置为1,表示TIME_WAIT状态的socket允许重新用于新的TCP连接,这对服务器来说意义重大,因为有总是有大量链接处于TIME_WAIT状态;ner.ipv4.tcp_keepalive_time=600#keepalive启动时,TCP发送keepalive报文的频率;默认为2小时,设置为10分钟,可以更改快速清理无效链接。net.ipv4.tcp_fin_timeout=30#当服务器主动关闭连接时,socket保持FIN_WAIT_2状态的最长时间net.ipv4.tcp_max_tw_buckets=5000#该参数表示允许的TIME_WAITsockets个数的最大值操作系统。这个数字,TIME_WAIT套接字将立即被清除并打印一条警告消息。#这个参数默认是180000,过多的TIME_WAIT套接字会拖慢web服务器。net.ipv4.ip_local_port_range=102465000#定义UDP和TCP连接的本地端口范围。net.ipv4.tcp_rmem=102408738012582912#定义TCP接受缓冲区的最小值、默认值和最大值。net.ipv4.tcp_wmem=102408738012582912#定义TCP发送缓冲区的最小值、默认值和最大值。net.core.netdev_max_backlog=8096#当网卡接收数据包的速度快于内核处理速度时,就会有一个队列来保存这些数据包。该参数表示队列的最大值。net.core.rmem_default=6291456#表示内核socket接受缓冲区的默认大小。net.core.wmem_default=6291456#表示内核socket发送缓冲区的默认大小。net.core.rmem_max=12582912#表示内核socket接受更大的buffersize。net.core.wmem_max=12582912#表示内核socket发送缓冲区的较大大小。#注:以上四个参数需要根据业务逻辑和实际硬件成本综合考虑;net.ipv4.tcp_syncookies=1#与性能无关。用于解决对TCP的SYN攻击。net.ipv4.tcp_max_syn_backlog=8192#该参数表示TCP三次握手建立阶段SYN请求队列的最大长度。默认为1024。将它设置得更大可以使Linux在Nginx太忙而无法接受新连接时无法失败。丢失客户端发起的连接请求。net.ipv4.tcp_tw_recycle=1#这个参数用来设置和开启timewait快速回收。net.core.somaxconn=262114#该选项默认值为128,该参数用于调整系统同时发起的TCP连接数。在高并发请求中,默认值可能会导致连接超时或者重传,所以需要结合高并发请求数来调整这个值。net.ipv4.tcp_max_orphans=262114#该选项用于设置系统中不与任何用户文件句柄关联的TCP套接字的最大数量。如果超过此数量,孤立链接将立即重置并输出警告消息。这个限制说明为了防止简单的DOS攻击,不要过分依赖这个限制甚至降低这个值,更多的时候要增加这个值。#为了方便使用,下面没有注释的可以直接复制fs.file-max=999999net.ipv4.tcp_tw_reuse=1ner.ipv4.tcp_keepalive_time=600net.ipv4.tcp_fin_timeout=30
