概述
env
nginx version: nginx/1.20.2
CentOS Linux release 7.9.2009 (5.4.186-1.el7.elrepo.x86_64)
wrk 4.2.0
httpd-tools-2.4.6(该软件包包含压测工具 ab)
物理CPU: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
虚机配置: 8vCPU 、内存 8G
OS config
cat > /etc/security/limits.conf « EOF
- soft nproc 65535
- hard nproc 65535
- soft nofile 65535
- hard nofile 65535
EOF
systemd 服务配置文件 /etc/systemd/system.conf , 修改该文件后执行命令 systemctl daemon-reexec 后生效; 由 systemd 管理的其它服务进程, 可通过该配置文件进行全局资源配置
/usr/lib/systemd/system/nginx.service
[Service]
LimitNOFILE=100000
LimitNPROC=20000
cat /proc/7076/limits 查看进程 id 为 7076 的资源限制
cat /etc/nginx/nginx.conf
# 配置 worker 进程数、与 vCPU 绑定进行自动配置
worker_processes auto;
worker_cpu_affinity auto;
http {
...
}
ab
ab -n 100000 -c 3000 http://192.168.31.11/
请求总数 10w, 并发数 3k, 经测试、可达到每秒 1.2w 请求
wrk
wrk -t 2 -c 30 -d 60s –latency http://192.168.31.11/
使用 2 个线程,并保持 30 个 HTTP 连接打开,运行 60 秒的基准测试; 可达到每秒 10w 请求
netstat -an|awk ‘/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}’
运行 wrk 的机器必须有足够数量的可用临时端口,并且应该快速回收关闭的套接字。为了处理初始连接突发,服务器的 listen backlog 应该大于正在测试的并发连接数
仅更改 HTTP 方法、路径、添加标头或正文的用户脚本不会对性能产生影响。每个请求的操作,特别是构建一个新的 HTTP 请求,以及使用 response() 必然会减少可以生成的负载量