服务器性能测试与压测:sysbench、ab、wrk

用 sysbench 摸清 CPU/内存/磁盘底子,用 ab 和 wrk 压出 HTTP 服务的 QPS 与延迟。

上线前你需要知道服务器能扛多少。本文介绍三个常用工具:sysbench 测硬件基准,ab 和 wrk 压测 HTTP 服务。

安装工具

以 Ubuntu/Debian 为例:

sudo apt update
sudo apt install -y sysbench apache2-utils wrk

其中 apache2-utils 提供 ab(Apache Bench)。

sysbench:测 CPU、内存、磁盘

CPU 测试(计算素数,越快说明单核越强):

sysbench cpu --cpu-max-prime=20000 --threads=4 run

看 events per second(每秒事件数)越高越好,total time 越短越好。

内存吞吐:

sysbench memory --memory-block-size=1M --memory-total-size=10G run

关注 transferred 里的 MiB/sec。磁盘 I/O 需要先准备再运行、最后清理:

sysbench fileio --file-total-size=2G prepare
sysbench fileio --file-total-size=2G --file-test-mode=rndrw run
sysbench fileio --file-total-size=2G cleanup

重点看 read/write 的 MiB/s 和 95th percentile 延迟。

ab 与 wrk:压测 HTTP

ab 简单直接,-n 是总请求数,-c 是并发数:

ab -n 10000 -c 100 http://your-server/api/health

wrk 更适合高并发,-t 线程、-c 连接、-d 持续时间:

wrk -t4 -c100 -d30s http://your-server/api/health

看懂结果指标

  • QPS / Requests per second:每秒处理的请求数,越高越好。
  • Latency / 延迟:单次响应耗时。重点看 p95、p99(尾延迟),而不只是平均值——平均值会掩盖卡顿。
  • 失败请求 / Non-2xx:出现非 200 说明已过载或有错误,此时的 QPS 不可信。

压测注意事项

  • 别打生产:先在测试环境或副本上压,避免影响真实用户。
  • 逐步加压:并发从小到大(如 10 → 50 → 100),观察 QPS 何时不再增长、延迟何时飙升,那就是拐点。
  • 结合监控看瓶颈:压测时同时用 top、htop、vmstat 1、iostat -x 1 观察 CPU、内存、磁盘、网络,判断到底卡在哪一层。
  • 从别的机器发压:压测客户端和被测服务同机会互相抢资源,数据失真。

小结

sysbench 帮你摸清硬件底子,ab 和 wrk 帮你压出服务的真实吞吐与延迟。关键是逐步加压、盯住 p95/p99、结合系统监控定位瓶颈,并且永远先在测试环境验证,再上生产。