Nginx Linux内核参数优化
默认的Linux内核参数适合于通用的场景。Linux的特点是可以根据不同的应用场景调整内核参数以及安装的包和工具,使之成为专用的服务器。通常Linux用作各种服务器更为合适,作为高性能的Web服务器的基础服务是比较典型的应用。 当Nginx作为静态Web服务器、反向代理服务器等不同服务器时,所需的内核参数是不同的,本文针对通常的多并发Nginx应用,给出内核参数修改样表。 修改/etc/sysctl.conf,常用配置如下:
fs.file-max = 999999 net.core.netdev_max_backlog = 8096 net.core.rmem_default = 262144 net.core.wmem_default = 262144 net.core.rmem_max = 2097152 net.core.wmem_max = 2097152 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.ip_local_port_range = 1024 61000 net.ipv4.tcp_rmem = 4096 32768 262142 net.ipv4.tcp_wmen = 4096 32768 262142 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 执行sysctl–p命令,使修改生效。
各内核参数的作用如下。
1)fs.file-max:表示进程(在Nginx里指一个工作进程)可以同时打开的最大句柄数。本参数影响最大并发连接数。
2)net.ipv4.tcp_syncookies:解决TCP的SYN攻击。
3)net.ipv4.tcp_tw_reuse:参数为1时表示允许将TIME_WAIT状态的套接字重新用于新的TCP连接。服务器上的TCP协议栈在工作时会有大量的TIME_WAIT状态连接,重新使用这些连接对于服务器处理大并发连接非常有用。
4)net.ipv4.tcp_keepalive_time:表示当keepalive启用时,TCP发送keepalive消息的频率。默认为2小时,如果本值变小,可以更快地清理无效的连接。
5)net.ipv4.tcp_fine_timeout:表示服务器主动关闭连接时,套接字的FIN_WAIT-2状态最大时间。
6)net.ipv4.tcp_max_tw_buckets:表示操作系统允许的TIME_WAIT套接字数量的最大值。当超过这个值,TIME_WAIT状态的套接字被立即清除并输出警告消息,默认值为180000,过多的TIME_WAIT套接字会使服务器速度变慢。
7)net.ipv4.tcp_max_syn_backlog:表示TCP三次握手阶段SYN请求队列最大值,默认为1024。调置为更大的值可以使Nginx在非常繁忙的情况下,若来不及接收新的连接时,Linux不至于丢失客户端新创建的连接请求。
8)net.ipv4.ip_local_port_range:定义UDP和TCP连接中本地端口范围(不包括连接到远端的端口)。
9)net.ipv4.tcp_rmen:定义TCP接收缓存(TCP接收窗口)的最小值、默认值、最大值。
10)net.ipv4.tcp_wmen:定义TCP发送缓存(TCP发送窗口)的最小值、默认值、最大值。
11)net.core.netdev_max_backlog:当网卡接收报文速度大于内核处理速度时,本参数设置这个缓冲队列最大值。
12)net.core.rmem_default:表示内核套接字接收缓冲区默认值。
13)net.core.wmem_default:表示内核套接字发送缓冲区默认值。
14)net.core.rmem_max:表示内核套接字接收缓冲区最大值。
15)net.core.wmem_max:表示内核套接字发送缓冲区最大值。