Nginx高性能Web服务器之性能优化

Nginx服务器的高级配置

由于Nginx服务器运行的实际环境和提供的功能千差万别,可以根据软硬件环境进行更加定制化的配置。

针对IPv4的内核优化

修改/sbin/sysctl
生效/sbin/sysctl -p
1.net.core.netdev_max_backlog
该参数表示每一个网络接口接收数据包的速度比内核处理这些包的数据快时,允许发送到队列的数据包的最大数目。一般默认值为128.
而Nginx服务器中定义的NGX_LISITEN_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套接字不被关联到任何一个用户文件句柄上。
一般在系统内存比较充足的情况下,可以适当增大这个值。

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
该参数用于设置时间戳,可以避免序列号的卷绕。
在默认情况下,TCP协议会让内核接收这种“异常”的数据包。针对Nginx服务器来说,建议将其关闭:

net.ipv4.tcp_timestamps=0

6.net.ipv4.tcp_synack_retries
该参数用于设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数量。
一般设置成1,即内核放弃连接之前发送一次SYN+ACK包

net.ipv4.tcp_synack_retries=1

7.net.ipv4.tcp_syn_retries
该参数设置内核放弃建立连接之前发送SYN包的数量

net.ipv4.tcp_syn_retries=1

针对CPU的Nginx配置优化

在nginx.conf配置文件中的events块中
1.worker_processes
该指令用于设置Nginx服务的进程数。(通常几核就设置几线程)

#以四核CPU服务器举例

worker_processes 4;

2.worker_cpu_affinity
该指令用于为每个进程分配CPU的工作内核。(几核 就会几组几位数)

#四核
worker_cpu_affinity 0001 0010 0100 1000
#八核
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000

与网络连接相关的配置

1.keepalived_timeout
该指令用于设置Nginx服务器与客户端保持连接的超时时间

#在服务器端连接的时间设置为120s
#发送给用户端的应答报文头部中Keep-Alive域的超时时间设置为100s
keepalive_timeout 120s 100s;

2.send_timeout
该指令用于设置Nginx服务器响应客户端的超时时间

send_timeout 10s;

3.client_header_buffer_size
该指令用于设置家Nginx服务器允许的客户端请求头部的缓冲区大小,默认为1KB。
允许Nginx服务器接收较大的请求头部,可以改善服务器对客户端的支持能力。

client_header_buffer_size 4k;

4.multi_accept
用于配置Nginx服务器是否可能多地接收客户端的网络连接,默认值为off.

multi_accept on;

与事件驱动模型相关的配置

1.use
use指令用于指定Nginx服务器使用的事件驱动模型。

use select;

2.worker_connections
用于设置Nginx服务器的每个工作进程允许同时连接客户端的最大数量。

worker_connections 1024;

Nginx服务器允许同时连接的客户端最大数量:
作为http服务器时:
max _Client=worker_processes * worker_connections/2.
作为反向代理服务器时 :max_Client=worker_processes * worker_connections/4.

  • 为什么除以2:该公式基于http 1.1协议,一次请求大多数浏览器发送两次连接,并不是request和response响应占用两个线程。
  • 为什么除以4:因nginx作为方向代理,客户端和nginx建立连接,nginx和后端服务器也要建立连接

3.worker_rlimit_sigpending
该指令用于设置Linux平台的事件信号队列长度上限。
为了保证Nginx服务器对客户端请求的高效处理,根据客户端并发请求数量和服务器运行环境的处理能力设定该值。

worker_rlimit_sigpending 1024;

4.devpoll_changes和devpoll_events
这两个指令用于设置在/dev/poll事件驱动模式下Nginx服务器可以与内核之间传递事件的数量。
devpoll_changes:传递给内核的事件数量(默认值为32)
devpoll_events:从内核获取的事件数量(默认值为32)
5.kqueue_changes和kqueue_events
这两个指令用于设置在kqueue事件驱动模式下Nginx服务器可以与内核之间传递事件的数量。
kqueue_changes:传递给内核的事件数量(默认值为512)
kqueue_events:从内核获取的事件数量(默认值为512)
6.epoll_events指令
这两个指令用于设置在epoll事件驱动模式下Nginx服务器可以与内核之间传递事件的数量。
kqueue_events:与内核传递事件的数量(默认值为512)

发布了226 篇原创文章 · 获赞 40 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_40990818/article/details/102484102