nginx调优参数


net.ipv4.ip_local_port_range='1024 65000'
net.ipv4.tcp_tw_reuse='1'
net.ipv4.tcp_fin_timeout='15'
net.core.netdev_max_backlog='4096'
net.core.rmem_max='16777216'
net.core.somaxconn='4096'
net.core.wmem_max='16777216'
net.ipv4.tcp_max_syn_backlog='20480'
net.ipv4.tcp_max_tw_buckets='400000'
net.ipv4.tcp_no_metrics_save='1'
net.ipv4.tcp_rmem='4096 87380 16777216'
net.ipv4.tcp_syn_retries='2'
net.ipv4.tcp_synack_retries='2'
net.ipv4.tcp_wmem='4096 65536 16777216'
vm.min_free_kbytes='65536'


1、调整同时打开文件数量
# vim /etc/security/limits.conf 最后增加:
* soft nofile 204800
* hard nofile 204800
* soft nproc 204800
* hard nproc 204800

2、TCP最大连接数(somaxconn)
echo 65535 > /proc/sys/net/core/somaxconn

3、nginx内核参数优化:
net.ipv4.tcp_max_tw_buckets = 6000 #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死
net.ipv4.ip_local_port_range = 1025 65000  # 指定端口范围的一个配置,默认是32768 61000
net.ipv4.tcp_tw_recycle = 1   #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。慎用,会导致客户端连接失败。
net.ipv4.tcp_tw_reuse = 1 #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_syncookies = 1   #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.core.somaxconn = 262144 #定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为1024
net.core.netdev_max_backlog = 262144 #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144 #表示SYN队列的长度,默认为1024,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_synack_retries = 1 #  syn-ack握手状态重试次数,默认5,遭受syn-flood攻击时改为1或2 
net.ipv4.tcp_syn_retries = 1 # 外向syn握手重试次数,默认4
net.ipv4.tcp_fin_timeout = 1 #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 30  #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。

 
sysctl.conf针对IPv4内核的7个参数的配置优化:
1、net.core.netdev_max_backlog  #每个网络接口的处理速率比内核处理包的速度快的时候,允许发送队列的最大数目。
[root@Server1 nginx]# sysctl -a | grep max_backlog
net.core.netdev_max_backlog = 1000  这里默认是1000,可以设置的大一些,比如:
net.core.netdev_max_backlog = 102400

2、net.core.somaxconn: #用于调节系统同时发起的TCP连接数,默认值一般为128,在客户端存在高并发请求的时候,128就变得比较小了,可能会导致链接超时或者重传问题。
net.core.somaxconn = 128  #默认为128,高并发的情况时候要设置大一些,比如:
net.core.somaxconn = 102400
3、net.ipv4.tcp_max_orphans:设置系统中做多允许多少TCP套接字不被关联到任何一个用户文件句柄上,如果超出这个值,没有与用户文件句柄关联的TCP套接字将立即被复位,同时给出警告信息,这个值是简单防止DDOS(Denial of service)的攻击,在内存比较充足的时候可以设置大一些:
net.ipv4.tcp_max_orphans = 32768 #默认为32768,可以改该打一些:
net.ipv4.tcp_max_orphans = 102400
4、net.ipv4.tcp_max_syn_backlog #用于记录尚未收到客户度确认消息的连接请求的最大值,一般要设置大一些:
net.ipv4.tcp_max_syn_backlog = 256  #默认为256,设置大一些如下:
net.ipv4.tcp_max_syn_backlog =  102400
5、net.ipv4.tcp_timestamps #用于设置时间戳,可以避免序列号的卷绕,有时候会出现数据包用之前的序列号的情况,此值默认为1表示不允许序列号的数据包,对于Nginx服务器来说,要改为0禁用对于TCP时间戳的支持,这样TCP协议会让内核接受这种数据包,从而避免网络异常,如下:
net.ipv4.tcp_timestamps = 1 #默认为1,改为0,如下:
net.ipv4.tcp_timestamps = 0
6、net.ipv4.tcp_synack_retries #用于设置内核放弃TCP连接之前向客户端发生SYN+ACK包的数量,网络连接建立需要三次握手,客户端首先向服务器发生一个连接请求,服务器收到后由内核回复一个SYN+ACK的报文,这个值不能设置过多,会影响服务器的性能,还会引起syn攻击:
net.ipv4.tcp_synack_retries = 5 #默认为5,可以改为1避免syn攻击
net.ipv4.tcp_synack_retries = 1
7、net.ipv4.tcp_syn_retries  #与上一个功能类似,设置为1即可:
net.ipv4.tcp_syn_retries = 5 #默认为5,可以改为1
net.ipv4.tcp_syn_retries = 1
 
四:配置文件中针对CPU的2个优化参数:
1、woker_precess #设置Nginx 启动多少个工作进程的数量
2、woker_cpu_affinit #固定Nginx 工作进程所运行的CPU核心
 
五:配置文件中与网络相关的4个指令:
1、keepalived_timeout 60 50#设置Nginx服务器与客户端保持连接的时间是60秒,到60秒后服务器与客户端断开连接,50s是使用Keep-Alive消息头与部分浏览器如 chrome等的连接事件,到50秒后浏览器主动与服务器断开连接。
keepalived_timeout 60 50;
2、sendtime_out  10s #Http核心模块指令,指定了发送给客户端应答后的超时时间,Timeout是指没有进入完整established状态,只完成了两次握手,如果超过这个时间客户端没有任何响应,nginx将关闭与客户端的连接。
sendtime_out 10s;
3、client_header_timeout  #用于指定来自客户端请求头的headerbuffer大小,对于大多数请求,1kb的缓冲区大小已经足够,如果自定义了消息头部或有更大的cookie,可以增加缓冲区大小。
client_header_timeout 4k;
4、multi_accept  #设置是否允许,Nginx在已经得到一个新连接的通知时,接收尽可能更多的连接。
    multi_accept on;
 
六:配置文件中与驱动模型相关的8个指令: 
1、use; #用于指定Nginx 使用的事件驱动模型
2、woker_process; #指定Nginx启动的工作进程的数量
3、woker_connections  65535#指定Nginx 每个工作进程的最大连接数,woker_connections  *  woker_process即为Nginx的最大连接数量。
4、woker_rlimit_sigpending 65535  #Nginx每个进程的事件信号队列的上限长度,如果超出长度,Nginx则使用poll模型处理

5、devpoll_changes 和 devpoll_events #用于设置Nginx 在/dev/poll 模型下Nginx服务器可以与内核之间传递事件的数量,前一个设置传递给内核的事件数量,后一个设置从内核读取的事件数量,默认为512。
6、kqueue_changes 和 kqueue_events #设置在kqueue模型下Nginx服务器可以与内核之间传递事件的数量,前一个设置传递给内核的事件数量,后一个设置从内核读取的事件数量,默认为512。
7、epoll_events #设置在epoll驱动模式下Nginx 服务器可以与内核之间传递事件的数量,默认为512。
8、rtsig_signo  #设置Nginx在rtsig 模式使用的两个信号中的第一个,第二个信号是在第一个信号的编号上加1.
9、rtsig_overflow #这些参数指定如何处理rtsig队列溢出。当溢出发生在nginx清空rtsig队列时,它们将连续调用poll()和 rtsig.poll()来处理未完成的事件,直到rtsig被排空以防止新的溢出,当溢出处理完毕,nginx再次启用rtsig模式,rtsig_overflow_events specifies指定经过poll()的事件数,默认为16,rtsig_overflow_test指定poll()处理多少事件后nginx将排空rtsig队列,默认值为32,rtsig_overflow_threshold只能运行在Linux 2.4.x内核下,在排空rtsig队列前nginx检查内核以确定队列是怎样被填满的。默认值为1/10,“rtsig_overflow_threshold 3”意为1/3。


文章作者: yushui1995
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yushui1995 !
评论
  目录