第一步:使用压测工具确认当前瓶颈
调优之前建议先压测,不建议上来就盲目修改配置。常用压测工具推荐 ab、wrk,可以输出QPS、平均响应时间、失败请求数,作为调优前后对比基准。
wrk 压测示例命令:
wrk -t4 -c200 -d30s http://你的域名或者服务器IP/
参数说明:-t 线程数,-c 并发连接数,-d 压测持续时间;请把「你的域名或者服务器IP/」替换成自己网站地址。压测时同步观察 top、ss -s、netstat,重点看CPU占用、TIME_WAIT连接堆积、文件句柄是否耗尽。
ab 压测示例命令:
ab -n 10000 -c 200 http://你的域名或者服务器IP/
n代表总请求数,c代表并发用户数;请把「你的域名或者服务器IP/」替换成自己网站地址。压测记录初始QPS、平均延迟、错误率,作为调优的对照基线。
核心参数调优:worker 进程与连接配置
nginx默认配置偏保守,worker_processes 默认是1,多核服务器性能无法充分利用。下面配置直接写入nginx主配置文件nginx.conf即可,参数可按需微调:
worker_processes auto; worker_cpu_affinity auto; worker_connections 10240; multi_accept on;
worker_processes auto 自动匹配CPU核心数量;worker_cpu_affinity 将worker进程绑定CPU核心,减少进程切换开销;worker_connections 提高单进程最大连接数;multi_accept 开启一次性接收多个新连接,提升高并发接入能力。
keepalive 长连接调优,减少握手开销
短连接每次请求都要TCP三次握手,高并发下会产生大量TIME_WAIT,占用端口资源。合理开启keepalive复用连接,放在http块或者对应server块内:
keepalive_timeout 65; keepalive_requests 1000; keepalive 32;
keepalive_requests 代表单个长连接可以处理的请求数量,默认值偏低,高并发站点建议适当上调。如果是反向代理后端业务,还需要同步调整 upstream 块内的 keepalive 参数。
缓冲区与文件句柄优化
大请求头、POST大报文场景,缓冲区过小会触发临时磁盘写入,拖慢响应速度。下面这一段放到nginx的http配置段:
client_header_buffer_size 4k; large_client_header_buffers 4 16k; client_body_buffer_size 16k;
系统层面修改ulimit,用于解除文件打开数量限制;这条命令临时生效,重启服务器会失效,需要永久生效请修改 /etc/security/limits.conf:
ulimit -n 65535
补充优化:开启gzip与sendfile
sendfile 开启零拷贝传输,静态资源站点提升明显;gzip压缩降低传输体积,减少带宽消耗,写入http块:
sendfile on; tcp_nopush on; tcp_nodelay on; gzip on; gzip_types text/plain application/css application/javascript;
调优注意事项
1、每修改一次配置,执行校验,确认语法无误再重载,这条命令通用,不需要修改:
nginx -t && nginx -s reload
2、不要一次性修改全部参数,建议单参数调整,重新压测对比QPS和延迟,确认提升后再继续下一项,方便定位副作用。
3、nginx调优有上限,如果压测后CPU已经跑满,瓶颈已经转移到后端PHP、数据库,继续调nginx参数不会再有明显收益。
总结
nginx性能调优核心思路:先压测建立基准,再依次调整worker进程、连接数、keepalive、缓冲区、文件句柄,每次改动都做压测对比。大部分默认配置适配小型站点,业务并发上涨之后,就需要针对性调优,充分释放nginx的并发处理能力。

















![表情[baoquan]-环球云域CloudIDC](https://cloudidc.vip/wp-content/themes/zibll/img/smilies/baoquan.gif)


暂无评论内容