site logo

Marico's space

如何用apache2-utils做网站简单压测?

Others 2025-11-18 20:40:48 55

1. 安装 apache2-utils

确保系统已安装 apache2-utils(包含 ab 工具):

sudo apt update
sudo apt install apache2-utils -y

2. 基本压测命令

命令格式

ab [选项] <URL>

常用选项

选项

说明

示例值

-n

总请求数

-n 1000

-c

并发用户数

-c 100

-t

测试时长(秒)

-t 60

-k

启用 HTTP Keep-Alive

-k

-H

添加自定义请求头

-H "Header: Value"

-p

指定 POST 数据文件

-p postdata.txt

-T

POST 数据内容类型

-T "application/json"

3. 简单压测示例

示例1:基础 GET 请求测试

测试 http://example.com/,模拟 100 个并发用户,共发起 1000 个请求:

ab -n 1000 -c 100 http://example.com/

示例2:带 Keep-Alive 的测试

启用 HTTP Keep-Alive(复用 TCP 连接,减少握手开销):

ab -n 1000 -c 100 -k http://example.com/

示例3:POST 请求测试

测试 POST 接口,需准备数据文件(如 postdata.txt):

# postdata.txt 内容示例:
{"username": "test", "password": "123456"}

# 执行测试:
ab -n 500 -c 50 -p postdata.txt -T "application/json" http://example.com/api/login

示例4:指定测试时长

测试持续 60 秒,自动计算总请求数

ab -t 60 -c 100 http://example.com/ 

4. 高级用法

(1)添加自定义请求头

模拟浏览器请求或传递认证信息:

bash
ab -n 1000 -c 100 -H "Authorization: Bearer token123" -H "User-Agent: MyTest" http://example.com/

(2)输出到文件

将结果保存到文件以便分析:

bash
ab -n 1000 -c 100 http://example.com/ > ab_report.txt

(3)结合 tee 实时查看并保存

bash
ab -n 1000 -c 100 http://example.com/ | tee ab_report.txt

5. 结果解读

关键指标

  1. 吞吐量(Requests per second)
    • 值越高,服务器处理能力越强。
    • 若下降明显,可能因服务器达到瓶颈(CPU、内存、带宽等)。
  2. 平均响应时间(Time per request)
    • 包括网络延迟和服务器处理时间。
    • 并发数增加时,若响应时间显著上升,可能存在性能问题。
  3. 错误率(Failed requests)
    • 非零值需检查服务器日志(如 502/504 错误可能因后端服务崩溃)。

示例输出分析

Concurrency Level:      100
Time taken for tests:   5.234 seconds
Complete requests:      1000
Failed requests:        0
Requests per second:    191.06 [#/sec] (mean)
Time per request:       523.432 [ms] (mean)
Time per request:       5.234 [ms] (mean, across all concurrent requests)
Transfer rate:          123.45 [Kbytes/sec] received
  • 结论:服务器在 100 并发下平均每秒处理 191 个请求,平均响应时间 523ms,无错误。

6. 注意事项

  1. 测试环境
    • 避免在生产环境直接压测,建议使用测试服务器或低峰期操作。
    • 确保测试 URL 可公开访问(无需认证或已处理认证)。
  2. 资源监控
    • 压测时通过 htopnmon 或 vmstat 监控服务器资源(CPU、内存、IO)。
    • 示例命令:
bash
htop  # 实时查看系统资源
  1. 合理设置参数
    • 并发数(-c)不宜过高,避免压垮服务器(建议从低并发逐步增加)。
    • 总请求数(-n)需足够大以获取稳定数据(通常 ≥1000)。
  2. HTTPS 支持
    • ab 默认支持 HTTPS,但若证书无效需添加 -k 忽略验证(不推荐生产环境使用):
bash
ab -k -n 1000 -c 100 https://example.com/