JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Nginx 单例 50w QPS 配置优化实践,直接拉满 CPU 资源

wys521 2024-09-04 15:37:32 精选教程 111 ℃ 0 评论

概述

Nginx 默认安装下, 无论怎么压测, 其 CPU 利用率都无法直接拉满, 其利用率最大为 45% 左右, 本文便是从实践出发, 为解决这个疑问而来。

压测工具 wrk 采用多线程 + 网络异步 IO 模型, 网络异步 IO 可以使得系统使用很少的线程模拟大量的网络连接以增大并发量; 运行 wrk 的机器必须有足够数量的可用临时端口,并且应该快速回收关闭的套接字。为了处理初始连接突发,服务器的 listen backlog 应该大于正在测试的并发连接数

1、部署环境介绍

CentOS Linux release 7.9.2009 (5.4.186-1.el7.elrepo.x86_64)
nginx version: 1.20.2
wrk version:  4.2.0
CPU: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
KVM 虚机配置: 20 vCPU 、8G RAM
请求页面为 Nginx 默认页面: /usr/share/nginx/html/index.html

部署

1、nginx 安装、调整内核参数

yum install nginx
systemctl stop firewalld.service

cat > /etc/sysctl.conf << EOF
net.ipv4.tcp_max_syn_backlog = 1024
net.core.somaxconn = 1024
EOF
sysctl -p

2、wrk 编译安装

git clone https://github.com/wg/wrk.git
cd wrk && make
cp wrk /usr/bin/wrk && chmod +x /usr/bin/wrk

3、Nginx 主要配置项 /etc/nginx/nginx.conf

# 配置 worker 进程数、与 vCPU 数一致, 并进行自动绑定
worker_processes  auto;
worker_cpu_affinity auto;

events {
    use epoll;
    worker_connections  1024;
}

http {
  ...
  sendfile on;
  tcp_nopush on;     # 必须在 sendfile 开启模式才有效, 可提高一倍的并发量
  access_log off;
  ...
  server {
    listen       80 backlog=1024;
    ...
  }
}
# sendfile on:是否开启高效文件传输模式, 对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载

验证

1、启动 20 个线程, 保持 800 个 http 连接, 持续压测时间 60s

wrk -t 20 -c 800 -d 60s --latency http://192.168.31.11
> Running 1m test @ http://192.168.31.11
>   20 threads and 800 connections
>   Thread Stats   Avg      Stdev     Max   +/- Stdev
>     Latency     1.59ms    0.93ms  40.13ms   46.35%
>     Req/Sec    25.25k    17.32k   83.60k    85.12%
>   Latency Distribution
>      50%    1.64ms
>      75%    2.53ms
>      90%    2.81ms
>      99%    3.42ms
>   30180907 requests in 1.00m, 23.89GB read
> Requests/sec: 502179.99
> Transfer/sec:    407.08MB
// 结论说明:
// 单个线程 QPS 平均大小 25.25k,  50% 的请求在 1.64 毫秒内完成
// 可达到每秒 50w 请求, 带宽 3.3Gbps, CPU 利用率 97.2%

// 实时查看网络 pps、bandwidth
sar -n DEV 1
> 10:33:36 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
> 10:33:37 AM      eth0 508080.22 508068.13  51972.99 451661.46      0.00      0.00      0.00

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表