【官网】
【参考】
1. ab版本
ab是一款可以测试HTTP服务器的工具,它最初被设计出来是为了测试Apache服务器的并发量。主要可以测试每秒可以访问多少request请求。
ab是所有压测工具中使用起来比较简单的一款,如果用的是MacOS,那么自带的系统已经安装好了,可以使用ab -V
查看版本:
2. 一个例子
例子,使用类似如下的命令就能测试某个API:
结果输出:ab -k -n 1600 -c 40 localhost:8080/message/custom-pool
3. 常见的参数解释
ab的参数非常多,也可自定义header,具体可以参见官网解释。
比较常见的参数有:
-c
:Concurrency。表示在同一时间有多少并发量(即同时在线的用户数)。当加了这个参数表示实际的压力数量。-n
:表示有多少个请求。如果-n
和-c
的数值同时比较高,说明目标server在承受比较高的流量的峰值时能正常运行的时间也比较久。-k
:KeepAlive,即http中的keepAlive,即浏览器和服务端之间保持长连接,这个连接是可以复用的。通常HTTP1.1中是默认打开的,所以想要更真实的模拟浏览器请求,我们可以声明打开,声明了即为true,不必特地的输入参数。
上述例子中,API localhost:8080/version会在并发40个请求的情况下被调用1600次,同时会使用keep alive的http header。
4. 结果解释
在调用完成后,会在命令行中输出结果,结果包含各式各样的报告,最重要的一行是:
Time per request: 518.881 [ms] (mean)
表示每个request的平均时间为518.881ms。
5. 遇到的问题
问题1:socket: Too many open files (24)
在设置并发量较大的情况下,报如下错误:
ab -k -n 16000 -c 800 localhost:8080/message/sync
This is ApacheBench, Version 2.3 <>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking localhost (be patient)
socket: Too many open files (24)
参考:https://gist.github.com/zmts/a83ba792ecf09e0fe70bc26f33a0eafd
查看系统默认设置:
ulimit -a
可改大一些:
ulimit -n 65535
问题2:测试带参数的API
ab -k -n 16000 -c 800 localhost:8080/sync_result?ms=500
zsh: no matches found: localhost:8080/sync_result?ms=500
需要将连接放入单引号内,如:
ab -k -n 16000 -c 800
localhost:8080/sync_result?ms=500
问题3:Connection reset by peer (54)
ab -k -n 8000 -c 400 localhost:8080/flux_result
This is ApacheBench, Version 2.3 <>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking 127.0.0.1 (be patient)
apr_socket_recv: Connection reset by peer (54)
Total of 401 requests completed
网上查了下可能是版本问题,我换成了docker。
6. 通过docker安装
docker hub:https://hub.docker.com/r/jordi/ab
6.1 拉取镜像
docker pull jordi/ab
6.2 使用,需要将localhost换成本地的Ip(我用x.x省略了具体的地址):
docker run --rm jordi/ab -k -n 8000 -c 400 http://192.168.x.x:8080/flux_result