面试题答案
一键面试影响性能的配置参数及调整方法与原理
- worker_processes
- 调整方法:设置为服务器CPU核心数,例如
worker_processes 4;
(假设服务器有4个CPU核心)。 - 原理:Nginx以多进程模式工作,每个worker进程独立处理请求。此参数指定Nginx启动的worker进程数,合适的数量可以充分利用CPU资源,避免进程过多导致的上下文切换开销,过少则无法充分利用多核CPU性能。
- 调整方法:设置为服务器CPU核心数,例如
- worker_connections
- 调整方法:根据服务器内存及预估并发量设置,一般可设置为一个较大值,如
worker_connections 10240;
。 - 原理:每个worker进程能处理的最大连接数。增大此值可以让每个worker进程处理更多的并发连接,但需注意服务器内存能否承受,因为每个连接会占用一定的内存资源。
- 调整方法:根据服务器内存及预估并发量设置,一般可设置为一个较大值,如
- multi_accept
- 调整方法:设置为
on
,即multi_accept on;
。 - 原理:默认情况下,worker进程一次只接受一个新连接。开启
multi_accept
后,worker进程可以一次接受所有新连接,减少进程在事件处理循环中的切换次数,提高连接处理效率,从而提升整体性能。
- 调整方法:设置为
- tcp_nopush
- 调整方法:对于HTTP响应头较大的场景,设置为
on
,如tcp_nopush on;
。 - 原理:启用此参数后,Nginx会将响应数据积攒到一定量后再发送,减少网络小包的数量,提高网络利用率,适用于像文件传输等场景,避免大量小数据包在网络中传输带来的额外开销。
- 调整方法:对于HTTP响应头较大的场景,设置为
- tcp_nodelay
- 调整方法:对于实时性要求高的场景(如Websocket),设置为
on
,即tcp_nodelay on;
。 - 原理:启用
tcp_nodelay
后,数据会尽快发送,而不会等待积攒到一定量,保证数据的实时性,减少数据传输的延迟。
- 调整方法:对于实时性要求高的场景(如Websocket),设置为
- keepalive_timeout
- 调整方法:根据业务场景合理设置,比如网页浏览场景可设置为
keepalive_timeout 60;
。 - 原理:此参数定义了客户端和服务器端之间保持连接的超时时间。合适的设置可以避免长时间占用连接资源,在高并发场景下,及时释放闲置连接,让服务器能够处理更多新的连接请求。
- 调整方法:根据业务场景合理设置,比如网页浏览场景可设置为
- sendfile
- 调整方法:设置为
on
,即sendfile on;
。 - 原理:启用
sendfile
后,Nginx可以直接将文件内容发送到网络套接字,而无需先将文件内容拷贝到用户空间缓冲区,减少了内核空间到用户空间的上下文切换和数据拷贝次数,提高文件传输效率,提升整体性能。
- 调整方法:设置为