技术分享

3分钟搞定网站压测!程序员必备的轻量级神器wrk

作者头像 人称外号大脸猫
27 阅读
3分钟搞定网站压测!程序员必备的轻量级神器wrk

防患于未然,才是技术人的优雅

你的网站真的准备好迎接流量高峰了吗?页面加载缓慢、响应时间过长、甚至服务完全崩溃——别等到用户无法访问时才追悔莫及!

今天给大家介绍一款轻量级压测神器wrk,只需3分钟,就能帮你摸清网站底细,提前发现系统瓶颈。

为什么选择wrk?

wrk是一款现代的HTTP基准测试工具,凭借其出色的性能表现和简洁的设计理念,已经成为众多开发者的首选压测工具:

  • 轻量高效:单文件、低资源消耗,却能产生巨大压力
  • 简单易用:一条命令就能开始测试,无需复杂配置
  • 功能强大:支持Lua脚本,可模拟复杂业务场景

极简安装:一行命令搞定

# Ubuntu/Debian系统
sudo apt-get install build-essential libssl-dev git -y
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
sudo cp wrk /usr/local/bin

# Mac系统
brew install wrk

# CentOS系统
sudo yum groupinstall 'Development Tools'
sudo yum install openssl-devel
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
sudo cp wrk /usr/local/bin

安装验证:终端输入 wrk --version,出现版本信息即安装成功

基础用法:快速上手实战

# 模拟12个线程、100个连接、持续30秒的测试
wrk -t12 -c100 -d30s https://你的网站.com

参数解析

  • -t:线程数(建议设置为CPU核心数的2-4倍)
  • -c:连接数(模拟的并发用户数)
  • -d:测试时长(单位:秒(s)、分(m)、时(h))
  • -s:指定Lua脚本路径
  • -H:自定义HTTP请求头

结果解读:一眼看懂性能数据

测试结束后,你会看到类似输出:

Running 30s test @ http://example.com
  12 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    54.21ms   16.33ms 212.12ms   77.66%
    Req/Sec   153.21     41.22   242.00     68.54%
  54876 requests in 30.10s, 82.45MB read
Requests/sec:   1823.21
Transfer/sec:      2.74MB

关键指标解读

  • 📍 Latency:响应时间(越小越好,直接影响用户体验)
  • 📍 Req/Sec:每秒请求数(QPS,越大说明处理能力越强)
  • 📍 Requests/sec:总吞吐量(系统整体处理能力)
  • 📍 传输数据量:了解网络带宽使用情况

高级用法:模拟真实业务场景

wrk支持Lua脚本,能模拟复杂业务逻辑:

  1. 测试POST接口
-- post.lua
wrk.method = "POST"
wrk.body = '{"username":"test","password":"test"}'
wrk.headers["Content-Type"] = "application/json"
wrk -t4 -c100 -d10s -s post.lua http://api.example.com/login
  1. 多URL随机访问(模拟用户真实行为):
-- random.lua
urls = {"/", "/home", "/product", "/about"}
request = function()
    path = urls[math.random(#urls)]
    return wrk.format(nil, path)
end
  1. 携带认证信息
# 自定义HTTP头
wrk -t4 -c100 -d10s -H "Authorization: Bearer token123" http://api.example.com

# 使用Cookie
wrk -t4 -c100 -d10s -H "Cookie: session_id=abc123" http://example.com
  1. 延迟发送请求(模拟用户思考时间):
-- delay.lua
function delay()
    return math.random(100, 500) -- 延迟100-500毫秒
end

实战案例

# 测试首页承压能力
wrk -t20 -c500 -d2m https://mall.example.com

# 测试搜索接口
wrk -t10 -c200 -d1m -H "Content-Type: application/json" -s search.lua https://api.example.com/search

# 测试下单接口
wrk -t8 -c100 -d30s -s order.lua https://api.example.com/order

通过测试可以发现:

  • 系统在不同压力下的表现
  • 找出性能瓶颈所在
  • 确定最大承载能力

性能分析方法

  1. 渐进式压力测试
# 从低到高逐步增加并发数
wrk -t4 -c50 -d30s http://example.com
wrk -t4 -c100 -d30s http://example.com
wrk -t4 -c200 -d30s http://example.com
  1. 关键指标监控
    • 响应时间变化曲线
    • 错误率统计
    • 系统资源使用情况

🚨 重要注意事项

  1. 合法测试:只测试自己拥有或获得授权的系统
  2. 环境隔离:在生产环境外的测试环境进行压测
  3. 循序渐进:从低压力开始,逐步增加
  4. 全面监控:同时监控服务器CPU、内存、网络等指标
  5. 及时停止:发现系统异常时立即停止测试

结语:防患于未然

一次简单的压测,可能避免一次重大的线上事故。wrk虽小,但能帮你:

  • 🔍 提前发现性能瓶颈 before 用户投诉
  • 📊 准确评估系统容量 before 流量高峰
  • 科学验证优化效果 after 系统调整

技术人的优雅,不仅在于解决问题的能力,更在于防患于未然的远见。