wrk | 虽小但强!

「这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战」。

前言

客户端采用wrk压测工具,服务端安装httpd服务。具体的httpd配置详见历史文章:# 关于Apache HTTP Serve你应该知道的!使用wrk对服务端进行压测,检测wrk的压测性能。

修改 httpd 的最大连接数

我们测试的后端服务采用httpd,为了能够承载更多的客户端连接,我们需要对httpd的默认配置进行修改。

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

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

复制代码

wrk

关于wrk

wrk是一款简单的HTTP压测工具,托管在Github上,github.com/wg/wrk,当然国内的码云Gitee上也有其资源,gitee.com/why168/wrk

wrk 的一个很好的特性就是能用很少的线程压出很大的并发量。原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等。其实它是复用了 redis 的 ae 异步事件驱动框架。确切的说 ae 事件驱动框架并不是 redis 发明的,它来至于 Tcl的解释器 jim,这个小巧高效的框架,因为被 redis 采用而更多的被大家所熟知。

依赖

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

复制代码

安装

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

# 编译
cd wrk
make

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

复制代码

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

sysctl.conf

# ===向/etc/sysctl.conf中增加以下几行配置===
fs.file-max = 1048576
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_mem = 524288 1048576 1572864
net.ipv4.tcp_rmem = 4096 4096 8388608
net.ipv4.tcp_wmem = 4096 4096 8388608

# TCP连接复用
net.ipv4.tcp_tw_reuse = 1
# TCP连接快速回收
net.ipv4.tcp_tw_recycle = 1

kernel.pid_max=1048576
kernel.threads-max=1048576
vm.max_map_count=1048576

复制代码

端口限制放开

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

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

复制代码

文件句柄放开

使用命令:ulimit -n 1048576

或:修改配置文件

cat /etc/security/limits.conf

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

复制代码

执行测试

➜  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。

猜你喜欢

转载自juejin.im/post/7035883543842521102
wrk