目 录CONTENT

文章目录

wrk|小而强的性能测试工具

phyger
2022-03-21 / 0 评论 / 5 点赞 / 1,018 阅读 / 2,592 字 / 正在检测是否收录...

1、修改服务端最大连接数

1.1、修改 httpd 的最大连接数

直接将如下代码加到 httpd 的配置文件中

<IfModule mpm_prefork_module>
                StartServers                     10
                MinSpareServers                   5
                MaxSpareServers                  10
                ServerLimit                    5500
                MaxClients                     5000
                MaxRequestsPerChild               0
</IfModule>

1.2、修改haproxy的最大连接数

打开haprox.cfg,修改以下配置项

maxconn 500000
fullconn 500000

1.3、修改Nginx最大连接数配置

# worker_processes auto; # worker进程数自动
worker_processes 16; # worker进程数定为16
events {
    worker_connections 1024; # 单进程最大连接数
}

Nginx的最大连接数算法:worker_processes * worker_connections = 16,384

1.4、修改Caddy的连接数

如果你有自己的Caddyfile,那么你需要修改max_conns_per_host这个字段的值。

如果你使用默认Caddy配置,因为Caddy默认是不限制连接数的,所以你也不需要修改什么。

Caddy默认连接数是不限制

另:Caddy的默认项目路径在/usr/share/caddy/

2、wrk的使用

2.1、依赖

# wrk 依赖gcc
# yum install gcc
# apt-get  install  build-essential

2.2、安装

# clone wrk 源码到测试机
git clone https://gitee.com/why168/wrk.git

# 编译
cd wrk
make

# 编译完后当前路径会生成wrk可执行文件

2.3、测试前解除客户端和服务端的限制

2.3.1、在/etc/sysctl.conf加入以下内容

# 系统最大文件打开数
fs.file-max = 20000000

# 单个用户进程最大文件打开数
fs.nr_open = 20000000

# 全连接队列长度,默认128
net.core.somaxconn = 10240
# 半连接队列长度,当使用sysncookies无效,默认128
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_syncookies = 0

# 网卡数据包队列长度  
net.core.netdev_max_backlog = 41960

# time-wait 最大队列长度
net.ipv4.tcp_max_tw_buckets = 300000

# time-wait 是否重新用于新链接以及快速回收
net.ipv4.tcp_tw_reuse = 1  
net.ipv4.tcp_tw_recycle = 1

# tcp报文探测时间间隔, 单位s
net.ipv4.tcp_keepalive_intvl = 30
# tcp连接多少秒后没有数据报文时启动探测报文
net.ipv4.tcp_keepalive_time = 900
# 探测次数
net.ipv4.tcp_keepalive_probes = 3

# 保持fin-wait-2 状态多少秒
net.ipv4.tcp_fin_timeout = 15  

# 最大孤儿socket数量,一个孤儿socket占用64KB,当socket主动close掉,处于fin-wait1, last-ack
net.ipv4.tcp_max_orphans = 131072  

# 每个套接字所允许得最大缓存区大小
net.core.optmem_max = 819200

# 默认tcp数据接受窗口大小
net.core.rmem_default = 262144  
net.core.wmem_default = 262144  
net.core.rmem_max = 16777216  
net.core.wmem_max = 16777216

# tcp栈内存使用第一个值内存下限, 第二个值缓存区应用压力上限, 第三个值内存上限, 单位为page,通常为4kb
net.ipv4.tcp_mem = 786432 4194304 8388608
# 读, 第一个值为socket缓存区分配最小字节, 第二个,第三个分别被rmem_default, rmem_max覆盖
net.ipv4.tcp_rmem = 4096 4096 4206592
# 写, 第一个值为socket缓存区分配最小字节, 第二个,第三个分别被wmem_default, wmem_max覆盖
net.ipv4.tcp_wmem = 4096 4096 4206592

2.3.2、端口限制放开

# 打开端口范围
echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range

# 修改端口释放等待时间(15-30s,默认为60s)
echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout

2.3.3、文件句柄放开

使用命令:ulimit -n 1048576

或:在/etc/security/limits.conf加入以下内容

# End of file
root      soft    nofile          1048576
root      hard    nofile          1048576
*         soft    nofile          1048576
*         hard    nofile          1048576

2.3.4、使配置生效

sysctl -p

2.4、执行测试

➜  ok git:(master) ./wrk -t12 -c100 -d30s http://www.baidu.com
Running 30s test @ http://www.baidu.com
  12 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    15.24ms    6.29ms 178.82ms   96.92%
    Req/Sec   471.00    119.40   595.00     86.44%
  30000 requests in 30.10s, 446.41MB read
  Socket errors: connect 0, read 88161, write 0, timeout 0
Requests/sec:    996.72
Transfer/sec:     14.83MB
➜  ok git:(master)

12 线程 100 个连接(并发)。QPS:996.72。

2.5、建议

建议单客户端最大连接数参数设置为:50000。

5

评论区