在做web服务开发时,一般会做服务压力测试。本文介绍两款简单、易用的HTTP压测工具,便于研发压测服务,明确服务临界值,寻找服务瓶颈点。压测时可重点关注以下指标,并发用户数、TPS(每秒事务数量)、RT(事务响应时间)、事务失败率、吞吐量、CPU(不要超过70%)和内存占用量。
一、ab压测工具
ab就是Apache Benchmark的缩写,顾名思义它是Apache组织开发的一款web压力测试工具,优点是使用方便,统计功能强大。使用:命令格式:ab -n 100 -c 10 'http://10.34.216.49:8000/test'
参数说明:ab一般常用参数就是 -n, -t ,和 -c。u-c(concurrency)表示用多少并发来进行测试;连接数。u-t表示测试持续多长时间。u-n表示要发送多少次测试请求。u一般-t或者-n选一个用。u默认情况,ab使用的是HTTP的GET请求进行测试。
优点:小巧。理论支持655350并发数。实际上,超过10000就跑不下去,实验证明支持的最高并发数约为5000。使用简单方便,一行指令即可。可精确控制请求次数:一些特殊场景会有此类需求。
缺点:无法直接在命令行测试不同url,只能测试一个url。输出结果格式无法修改。
二、Wrk工具
wrk 是一个很简单的 http 性能测试工具,也可以叫做 http benchmark 工具。只有一个命令行,就能做很多基本的 http 性能测试。wrk 是开源项目,代码在 github 上:wrk 只能运行在类Unix 的系统上。使用:命令格式:wrk <选项> <被测HTTP服务的URL> 。
参数说明:-c, --connections <N> 跟服务器建立并保持的TCP连接数量; -d, --duration <T> 压测时间;
-t,--threads <N>使用多少个线程进行压测;
-s,--script <S> 指定Lua脚本路径;
-H, --header <H> 为每一个HTTP请求添加HTTP头;
--latency 在压测结束后,打印延迟统计信息;
--timeout <T> 超时时间;
u-v,--version打印正在使用的wrk的详细版本信息;
<N>代表数字参数,支持国际单位 (1k, 1M, 1G);
<T>代表时间参数,支持时间单位 (2s, 2m, 2h)。
优点:并发度高。简单易用。使用Lua脚本可对wrk的初始化、请求和结果做二次开发。
缺点:并发访问请求数量计数有些不准,上50万的请求数量,一般会少几百到两千条左右。无法精确控制请求个数。无法像jmeter一样做持续平稳的压力访问,不太适合做稳定性测试。适合模拟访问峰值压力测试。