Nginx性能调优

Nginx性能取决于系统内核参数的设定以及Nginx自身的配置情况。自身调优配置主要来源于Core functionality提供选项。

::: warning 注意
性能调优需要结合现场实际,切勿生搬硬套
:::

自身配置

accept_mutex

Syntax:	accept_mutex on | off;
Default: accept_mutex off;
Context: events

开启该选项表示所有worker进程轮流的接受新的请求。默认情况下,一旦有新的请求都会通知所有的worker进程。如果新连接的数量较低,那所有请求都会通知一遍worker进程,造成系统资源浪费。推荐开启

multi_accept on

Syntax:	multi_accept on | off;
Default: multi_accept off;
Context: events

如果禁用multi_accept,则工作进程将一次接受一个新连接。否则,工作进程将一次接受所有新连接。推荐开启

use method

Syntax: use method;
Default: —
Context: events

指定默认的请求处理方法,一般不需要特殊指定,Nginx会根据系统自动选择最合适的选项。推荐使用use epoll

worker_aio_requests number

Syntax:	worker_aio_requests number;
Default: worker_aio_requests 32;
Context: events

当使用aioepoll方法时,指定每个工作进程的最大的异步I/O操作数量

worker_connections number

Syntax:	worker_connections number;
Default: worker_connections 1024;
Context: events

设置工作进程可以打开的最大同时连接数默认值是1024。这个数值包括了包括了所有的链接,这个数值不能超过打开文件的最大数量。

worker_cpu_affinity cpumask

Syntax:	worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
Default: —
Context: main

设置cpu亲和性,将worker进程绑定到CPU核心。每个cpu核心都由允许cpu的位掩码表示。应该为每个worker进程定义一个单独的集合。默认情况下,工作进程不绑定到任何特定的cpu。

worker_processes    4;
worker_cpu_affinity 0001 0010 0100 1000;

除了手动指定核心外,从1.9.0开始支持自动绑定核心

worker_processes auto;
worker_cpu_affinity auto;

也可以指定核心让nginx自动绑定调度

#nginx的worker进程仅会与奇数核心的cpu核心绑定
worker_cpu_affinity auto 01010101;

worker_processes number | auto

Syntax:	worker_processes number | auto;
Default: worker_processes 1;
Context: main

设定nginx的worker进程数量,默认数量为1。设置为cpu核心数或者是auto选项最佳。

worker_rlimit_nofile num

Syntax:	worker_rlimit_nofile number;
Default: —
Context: main

设定nginx可以打开最大文件数量,默认为65535,这个值推荐与系统的可以打卡的最大文件数(ulimit -n)一致

<think>好的,我现在要帮助用户了解如何对Nginx进行性能以支持5000个并发请求。首先,我需要回忆一下Nginx性能化相关知识点。根据用户提供的引用内容,尤其是引用[2]和引用[4],里面提到了需要根据工作量,比如静态内容或动态内容的不同设置。还有关于文件缓存、FastCGI和代理缓存的区别。 首先,用户的目标是支持5000个并发请求。这意味着需要Nginx的并发处理能力。我应该从整worker进程开始。通常,worker_processes应该设置为等于或稍大于CPU核心数,这样可以充分利用多核性能。然后,每个worker的连接数(worker_connections)也需要增加,可能需要整系统的文件描述符限制。 接下来是连接多路复用,使用epoll在Linux上更高效。然后保持长连接,减少TCP握手次数,可以适当整keepalive_timeout和keepalive_requests。 关于静态资源,用户引用[2]提到open_file_cache的设置,这样可以缓存文件描述符,减少重复打开文件的消耗。需要配置open_file_cache的参数,比如max、inactive时间等。同时,sendfile和tcp_nopush可以提升静态文件传输效率。 动态内容方面,引用[4]指出fastcgi_cache用于PHP动态内容,而proxy_cache用于静态文件。如果用户有动态内容,可能需要整FastCGI缓存参数,如fastcgi_cache_path,设置缓存区域的大小和过期时间。 系统级化也很重要,比如整内核参数,包括最大打开文件数(ulimit -n)、TCP缓冲区大小(net.core.somaxconn,net.ipv4.tcp_tw_reuse等)。这些设置可以提升系统的整体并发处理能力。 然后,需要验证配置是否正确,使用nginx -t,然后重载配置。测试工具可以用ab或wrk模拟高并发请求,监控Nginx的状态,比如使用stub_status模块查看活动连接数。 可能还需要考虑其他化点,比如压缩(gzip),负载均衡,或者使用HTTP/2。同时,根据引用[3],用户提到了Test::Nginx,可能涉及到测试模块,但用户当前的问题可能暂时不需要,不过可以作为扩展建议。 用户的问题可能涉及到静态和动态内容的不同处理,需要明确应用场景。根据引用[1],用户之前对比过Nginx和lighttpd的性能,可能当前场景是静态内容为主,所以重点化文件缓存和连接管理。 最后,生成相关问题,引导用户进一步探讨性能分析、化方法对比以及监控工具等。</think>### Nginx性能方案 #### 1. 基础配置整 - **工作进程化** 设置`worker_processes`为CPU核心数(或`auto`自动检测),并通过`worker_connections`控制每个进程的并发连接数: ```nginx worker_processes auto; # 默认1,建议等于CPU核心数 events { worker_connections 4096; # 单进程最大连接数(需结合系统ulimit整) use epoll; # Linux高效事件模型 } ``` 总并发量计算公式: $$最大并发 = worker\_processes \times worker\_connections$$ - **系统资源限制** 修改Linux文件描述符限制以支持更多连接: ```bash ulimit -n 65536 # 临时生效 # 永久生效需在/etc/security/limits.conf添加: * soft nofile 65536 * hard nofile 65536 ``` #### 2. 连接管理化 ```nginx http { keepalive_timeout 60; # 保持TCP连接复用时间 keepalive_requests 1000; # 单连接最大请求数 reset_timedout_connection on; # 超时后释放资源 } ``` #### 3. 静态资源加速 引用[2]中提到的文件缓存配置可减少磁盘IO: ```nginx http { open_file_cache max=2048 inactive=20s; # 缓存文件元信息 open_file_cache_valid 30s; # 缓存校验周期 open_file_cache_min_uses 2; # 至少访问2次才缓存 sendfile on; # 零拷贝传输模式(于read+write) tcp_nopush on; # 合并数据包减少网络开销 } ``` #### 4. 动态内容处理 若涉及PHP/Python等动态内容,需化FastCGI(引用[4]): ```nginx location ~ \.php$ { fastcgi_cache_path /tmp/nginx_cache levels=1:2 keys_zone=phpcache:100m inactive=60m; fastcgi_cache phpcache; fastcgi_cache_valid 200 301 302 10m; # 缓存HTTP 200等状态码内容 fastcgi_pass unix:/var/run/php-fpm.sock; } ``` #### 5. 操作系统内核 ```bash # 整TCP参数(/etc/sysctl.conf) net.core.somaxconn = 65535 # 最大待处理连接数 net.ipv4.tcp_tw_reuse = 1 # 快速回收TIME-WAIT连接 net.ipv4.tcp_max_syn_backlog = 65536 ``` #### 6. 压力测试与监控 - **测试工具** ```bash ab -n 100000 -c 5000 http://yourdomain.com/ wrk -t12 -c5000 -d30s http://yourdomain.com/ ``` - **状态监控** 启用`stub_status`模块: ```nginx location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } ``` 输出示例: ``` Active connections: 234 server accepts handled requests 456789 456789 987654 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值