Tuning NGINX for Performance中给出了一些调优建议,调整的不只是nginx参数,还是有系统参数。
net.core.somaxconn
:内核参数,等待建立的连接的数量,如果连接增长非常快,存在连接无法建立的情况,可以考虑将这个数值增大。如果设置的数值超过512,需要在nginx的listen指令后面添加backlog配置,并设置为相同的值。
backlog=number
sets the backlog parameter in the listen() call that limits the maximum length for the queue of pending connections.
By default, backlog is set to -1 on FreeBSD, DragonFly BSD, and macOS, and to 511 on other platforms.
net.core.netdev_max_backlog
:内核参数,网卡缓存报文的速度,调大可以提高报文吞吐。
sys.fs.file-max
:内核参数,整个系统可以打开的文件数。
nofile
:系统配置, /etc/security/limits.conf
中设置的用户可打开的文件数。
net.ipv4.ip_local_port_range
:内核参数,临时端口范围,如果port数量不足,可以调大,通常设置为1024~65000。
worker_processes:工作进程的数量
worker_connections:每个worker的最高并发
keepalive_requests:一个keep-alive连接中可以包含请求数。
keepalive_timeout:keep-alive长连接的保持时间。
keepalive:与upstream之间缓存的空闲keep-alive连接数量。
proxy_http_version:代理时使用的http协议,默认是1.0,如果使用keep-alive,需要修改成1.1。
proxy_set_header:转发到upstream时,添加的header,如果使用keep-alive,需要设置下面的header:
proxy_set_header Connection "";
access_log:开启访问日志缓存,添加buffer=size
,flush=time
设置日志刷新时间,或者干脆关闭访问日志off
。
send_file:使用send_file指令加速文件读取发送速度,send_file直接在内核态,将文件内容写入socket,不拷贝到用户空间。
limit_conn_zone和limit_conn:限制满足特定条件的连接数量。
limit_rate:限制向每个客户端的传输速率。
limit_req_zone和limit_req:限制请求的速率。
max_conns:到backend的最大连接数。
queue:存放等待被转发的请求的队列长度
使用Cache和Compression。