5.1 针对IPV4的7个参数配置优化
这里的参数与IPV4网络有关的Linux内核参数,可追加到Linux系统的/etc/sysctl.conf文件中,然后运行命令
#/sbin/sysctl -p生效
1. net.core.netdev_max_backlog
表示当每个网络接口接收数据包的速率比内核处理的速率块时,允许发送到队列的数据包最大数目,一般默认值为128,我们可以将其优化:net.core.netdev_max_backlog = 262144
2. net.core.somaxconn
用于调节系统同时发起的TCP连接数,一般默认值为128,在客户端请求高并发下,该默认值过小,可能导致连接超时或重传问题,此处可优化:net.core.somaxconn = 262144
3. net.ipv4.tcp_max_orphans
设定系统中最多允许存在的TCP套子节不被关联到任何一用户文件句柄上。一般系统内存充足情况下可增大这个参数值:net.ipv4.tcp_max_orphans = 262144
4. net.ipv4.tcp_max_syn_backlog
记录未收到客户端确认信息的连接请求最大值。拥有128MB内存的系统默认值为1024,小于128MB的系统默认值为128,一般在内存充足情况下可优化:net.ipv4.tcp_max_syn_backlog = 262144
5. net.ipv4.tcp.timestamps
设置时间戳,可避免序列号的卷绕。一般建议赋值为0,禁用对TCP时间戳的支持:net.ipv4.tcp.timestamps = 0
6. net.ipv4.tcp_synack_retires
用于设置放弃TCP连接之前向客户端发送SYN+ACK包的数量。为了建立连接,服务端和客户端要进行三次握手,第二次握手期间,内核需要发送SYN并附带一个回应前一个SYN的ACK,这个参数主要影响这个过程,一般赋值为1,即放弃连接之前发送一次SYN+ACK包:net.ipv4.tcp_retires = 1
7.net.ipv4.tcp_syn_retires
设置放弃建立连接之前发送SYN包数量,建议赋值为1:net.ipv4.tcp_syn_retires = 1
5.2针对CPU的优化的两个指令
1.worker_processes
worker processes 4;
- 设置nginx进程数,官方推荐设置为1,过多会影响系统IO效率,降低性能。在多核CPU情况下,我们可以适当增加,让资源更好的利用,双核: 2/4
2.worker_cpu_affinity
用来分配每个CPU的工作内核。以2进制的方式表示
eg: worker process 4;,此时有 4个进程,我们可设置:worker_cpu_affinity 0001 0100 1000 0010;
5.3 与网络连接有关的4个指令
1.keepalive_timeout
在前面3.3 的10 配置超时时间有讲
2.send_timeout
用于设置服务器响应客户端的超时时间,仅针对建立连接后某次活动之间的时间,若是超过这个时间没有任何活动,则服务器会关闭连接。
eg:send_timeout 10s
3.client_header_buffer_size
设置服务器允许客户端头部的缓冲区大小,默认为1KB,可根据系统分页大小来设置。
获取系统分页大小:
#getconf PAGESIZE
有些时候Nginx服务器返回400错误并且在日志中看不到任何提示信息,大部分情况是客户端请求头过大的原因。
建议赋值为 4kb: client_header_buffer_size 4k;
4.multi_accept
默认值为 off,用于配置服务器是否尽可能多地接收客户端网络连接请求。
5.4 事件驱动模型相关8个指令
1.user
指定事件驱动模型
2.worker_connections
每个进程允许同时连接的最大客户端数量(前面提过语法)
建议设置:worker_connections 65535;
3.worker_rlimit_sigpending
设置事件信号队列长度上限:worker_rilimit_sigpending limit (limit 为设置的上限值)
该指令主要影响事件驱动模型中rtsig模型可保存的最大信号数,根据实际客户端并发请求数量和服务器运行环境处理能力设定
4.devpoll_changes 和 devpoll_events
设置/dev/poll事件驱动模式下服务器与内核之间传递事件的数量,默认值为 32
devpoll_changes number : 设置传递给内核的事件数量
devpoll_events number:设置从内核获取的事件数量
5.kequeue_changes 和 kqueue_events
用于设置kqueue事件下服务器与内核之间传递事件的数量,默认值512
kequeue_changes number : 设置传递给内核的事件数量
kequeue_events number:设置从内核获取的事件数量
6.epoll_events
设置epoll事件驱动下 服务器与内核事件传递的数量,epoll事件驱动模式下 服务器 <——>内核 的事件传递数量是相同的。
epoll _change number (number默认值为512)
7.rtsig_signo指令
设置rtsig模式使用的两个信号中的第一个,第二个信号在第一个信号的编号上加1
rtsig_signo signo ,(默认第一个信号设置为 SIGRTMIN+10)
8.rtsig_overflow_*
该指令具体有三个指令:rtsig_overflow_events 、 rtsig_overflow_test 和 rtsig_overflow_threshold
这些指令用来控制当 rtsig模式中信号队列溢出时的处理方式
rtsig_overflow_* number
number:要设定的值
rtsig_overflow_events:指定队列溢出时使用poll库处理事件数,默认为16
rtsig_overflow_test:指定poll库处理完第几件事件后情况rtsig模型使用的信号队列,默认为32
rtsig_overflow_threshold:指定rtsig模式使用的信号队列中事件超过多少时就清空队列。
5.5 后端服务组件配置指令
1.upstream
-
语法:
upstream name{...}name:后端服务器组起的名字
-
说明:其类似于http、server等模块,用于设置服务器组中包含的服务器以及调度方法指令(默认是轮询:一个服务器请求处理出错时,请求会交给下一个服务器去处理,以此类推)
2.server指令
-
语法:
server address [parameters];address:服务器地址(可以是包含端口号的IP 或 是域名)
parameters:配置的属性
- weight = x , 权重
- max_fails = number ,设置一个请求允许失败的次数(404不认为是请求失败),默认为1(若设置为0则无法检查服务器是否有效)
- fail_time = time , 设置请求服务器的时间限制,(若服务器设置为down 则该值为0),默认为10s
- backup , 设置服务器为备用机
- down , 设置服务器为停用
3.ip_hash指令
- 说明:负载均衡的算法之一,同一IP的请求都接到同一服务器中。
4.keepalive指令
-
语法:
keepalive connetctionsconnections :每一个工作进程允许保持空闲连接的上限,若超值则将最近少用的连接关闭
5.least_conn指令
- 说明:负载均衡策略之一,将网络请求分配到连接最少的服务器上