5000并发_Web 高并发压测工具之 WRK, AB

v2-7ad404bafd919a893722766b1dad7e90_1440w.jpg?source=172ae18b

概述

  • 常见压力测试工具有: ab, wrk
  • 性能调优过程中必不可少的一环, 只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题
  • 对我们的被测系统发起攻击,以此检测系统在高并发压力下是否能正常运转
  • 创建多个并发线程、模拟多个访问者同时对某一 URL 进行访问,可对任何基于 url 的资源进行并发性能测试

ab

安装
yum -y install httpd-tools

命令选项

  • -n 请求数
  • -c 并发数
  • -s 等待响应的时间默认 30 秒
  • -H 自定义请求头参数,可多次使用该选项
  • -T 设置 Content-Type 请求头信息
  • -k 启用 HTTP KeepAlive 功能,即在一个 HTTP 会话中执行多个请求。默认时,不启用 KeepAlive 功能。

ab 示例

# 1. 基本实例
ab http://192.168.31.92/

# 2. 100 并发,5000 请求
ab -c 100 -n 5000 http://192.168.31.92/

# 3. 设置请求头信息 User-Agent
ab -c 500 -n 10000 
-H "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" 
http://192.168.31.92/

# 4. GET 传参
ab "http://192.168.31.91/api/test/?username=chris&password=123456"

# 5. POST 传参
echo "username="chris"&password="123456"" >> post.data
ab -p post.data -T "application/x-www-form-urlencoded" http://192.168.31.91/api/test/

wrk

概述

  • wrk 是一种现代 HTTP 基准测试工具,当在多核 CPU 上运行时,能够产生大量负载
  • 它结合了多线程设计和可扩展的事件通知系统如 epoll 和 kqueue; 支持大多数类 Unix,不支持 Windows
  • 基于 wrk 优化版的 wrk2, 其提供的额外参数 -R,用以指定每秒多少个请求限制

钩子函数

  • 启动阶段: 每个线程执行一次
    function setup(thread)
    function init(args) args 用于获取命令行中传入的参数
  • 运行阶段: 每次请求调用 1 次
    function delay() 每次请求之前延迟多少毫秒
    function request() 生成请求
    function response(status, headers, body) 解析响应
  • 结束阶段: 整个压测过程运行一次
    function done(summary, latency, requests) 可从参数给定的对象中,获取压测结果;

安装及命令选项

# 1. 安装
git clone https://github.com/wg/wrk.git
cd wrk && make
cp wrk /usr/sbin/wrk && chmod +x /usr/sbin/wrk

# 2. 命令选项
使用方法: wrk <选项> <被测HTTP服务的URL>
Options:
-c, --connections <N>  跟服务器建立并保持的TCP连接数量
-d, --duration    <T>  压测持续时间
-t, --threads     <N>  使用多少个线程进行压测
-s, --script      <S>  指定Lua脚本路径
-H, --header      <H>  为每一个HTTP请求添加HTTP头
--latency              在压测结束后,打印延迟统计信息
--timeout     <T>      超时时间
-v, --version          打印正在使用的wrk的详细版本信息
<N>代表数字参数,支持国际单位 (1k, 1M, 1G)
<T>代表时间参数,支持时间单位 (2s, 2m, 2h)

wrk 示例

# 1. 基本示例
wrk -t2 -c30 -d30s --latency http://192.168.31.92/

Running 30s test @ http://192.168.31.92/
  2 threads and 30 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.59ms    1.16ms  47.58ms   91.91%    // 线程延迟状态
    Req/Sec     9.23k   846.07    12.38k    68.83%    // 单个线程每秒请求数平均9.23k, 最大12.38k
  Latency Distribution      // 所有请求的延迟分布, 75%的请求延迟小于1.77毫秒
     50%    1.38ms
     75%    1.77ms
     90%    2.39ms
     99%    5.95ms
  551551 requests in 30.05s, 2.02GB read  // 2个线程, 30s内55万次请求
Requests/sec:  18355.61     // 2个线程每次请求1.8万次
Transfer/sec:     68.95MB


# 2. POST|GET 传参请求测试
wrk -t2 -c10 --latency --script=params.data http://192.168.31.91/api/test/

请求参数 params.data
cat > post.data <<EOF
wrk.method = "POST"
wrk.body = "username=chris&password=123456"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
EOF

# 3. 修改请求头信息 User-Agent 测试
wrk -t2 -c10 -d10s --latency 
-H "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" 
http://192.168.31.92/

# 4. 基于 lua 脚本定制测试报告
wrk -t2 -c10 -d10s -s setup.lua --latency http://192.168.31.92/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值