我的日常开发记录日志
首页
  • Laravel
  • Thinkphp
  • Swoole
  • Workman
  • php
  • HTML
  • CSS
  • JavaScript
  • Vue
  • ES6
  • 小程序
  • Mysql
  • Redis
  • Es
  • MongoDb
  • Git
  • Composer
  • Linux
  • Nginx
  • Docker
  • Vpn
  • 开发实战
  • 开发工具类
  • 友情链接
💖关于
💻收藏
  • 分类
  • 标签
  • 归档数据
GitHub (opens new window)

我的日常开发记录日志

never give up
首页
  • Laravel
  • Thinkphp
  • Swoole
  • Workman
  • php
  • HTML
  • CSS
  • JavaScript
  • Vue
  • ES6
  • 小程序
  • Mysql
  • Redis
  • Es
  • MongoDb
  • Git
  • Composer
  • Linux
  • Nginx
  • Docker
  • Vpn
  • 开发实战
  • 开发工具类
  • 友情链接
💖关于
💻收藏
  • 分类
  • 标签
  • 归档数据
GitHub (opens new window)
  • git

  • composer

  • linux

  • nginx

    • Nginx
    • nginx服务器跨域配置
    • ssl免费证书生成
    • nginx负载
    • nginx在linux上操作
    • ab基本压测
    • docker

    • vpn

    • frp

    • 脚本

    • 硬件

    • 运维
    • nginx
    窝窝侠
    2025-01-25

    ab基本压测

    # ApacheBench(ab)压力测试指南

    ApacheBench(ab)是 Apache 提供的一个非常简单的 HTTP 压力测试工具,常用于评估服务器的处理能力、响应时间以及稳定性。在进行 POST 请求 测试时,往往需要提供不同的请求体格式,并带上 Token 或 Cookie 等认证信息来模拟真实请求。

    • 支持的 POST 请求格式。
    • 如何在请求头中添加 Token 和 Cookie 进行身份验证。
    • ApacheBench 的各项常用参数及其作用。
    • 返回结果的分析。

    # 一、POST 请求常见格式

    POST 请求可以有不同的数据格式,以下是几种常见的 POST 数据格式。

    # 1. 表单数据(application/x-www-form-urlencoded)

    这是最常见的 POST 请求 格式,通常用于传统的 HTML 表单提交。

    格式示例:

    username=yourusername&password=yourpassword
    
    1

    在 ApacheBench 中,你可以将这个数据写入文件(如 post_data.txt),然后使用 -p 参数发送 POST 请求。

    发送请求命令:

    ab -n 100 -c 10 -p post_data.txt -T "application/x-www-form-urlencoded" https://api-test.sx1211.com/sms/ip
    
    1

    # 2. JSON 数据(application/json)

    一些现代的 API 采用 JSON 格式来传递请求体数据。这种方式通常用于 RESTful API。

    格式示例:

    {
      "username": "yourusername",
      "password": "yourpassword"
    }
    
    1
    2
    3
    4

    如果 API 接受 JSON 格式的请求体数据,你可以将其保存到文件(如 post_data.json)中,并发送请求。

    发送请求命令:

    ab -n 100 -c 10 -p post_data.json -T "application/json" https://api-test.sx1211.com/sms/ip
    
    1

    # 3. Multipart 数据(multipart/form-data)

    这种格式通常用于文件上传或包含二进制数据的请求。

    格式示例:

    --boundary
    Content-Disposition: form-data; name="file"; filename="example.jpg"
    Content-Type: image/jpeg
    
    <binary file content>
    --boundary--
    
    1
    2
    3
    4
    5
    6

    这种格式使用较为复杂,ApacheBench 本身不太适合进行 multipart 数据的测试,通常使用其他工具(如 curl)来进行上传测试。

    # 二、请求头中的 Token 和 Cookie

    在进行认证请求时,我们通常需要将 Token 或 Cookie 添加到请求头中。以下是如何在 ApacheBench 中实现这一点。

    # 1. Bearer Token(令牌认证)

    如果 API 使用 Bearer Token 进行身份验证,我们需要在请求头中添加 Authorization 字段。

    命令示例:

    ab -n 100 -c 10 -H "Authorization: Bearer <your_token>" https://api-test.sx1211.com/sms/ip
    
    1

    # 2. Cookie(会话认证)

    如果你的 API 使用 Cookie 进行身份验证(如通过 JSESSIONID),可以使用 -H 参数添加 Cookie 请求头。

    命令示例:

    ab -n 100 -c 10 -H "Cookie: JSESSIONID=<your_session_id>" https://api-test.sx1211.com/sms/ip
    
    1

    # 3. 同时使用 Token 和 Cookie

    有些情况下,你可能需要在同一个请求头中同时携带 Token 和 Cookie。你可以使用多个 -H 参数来实现这一点。

    命令示例:

    ab -n 100 -c 10 -H "Authorization: Bearer <your_token>" -H "Cookie: JSESSIONID=<your_session_id>" https://api-test.sx1211.com/sms/ip
    
    1

    # 三、ApacheBench(ab)常用参数及作用

    ApacheBench 提供了一些有用的参数,帮助我们在压力测试时进行灵活控制。以下是一些常用的参数及其作用:

    # 1. -n:指定请求的总数

    ab -n 100 https://api-test.sx1211.com/sms/ip
    
    1
    • 该参数指定要发送的请求总数。例如,-n 100 表示发送 100 个请求。

    # 2. -c:指定并发请求数

    ab -c 10 https://api-test.sx1211.com/sms/ip
    
    1
    • 该参数指定并发请求数,即同一时刻并发发送的请求数量。例如,-c 10 表示 10 个请求并发。

    # 3. -p:指定包含请求体数据的文件

    ab -p post_data.txt https://api-test.sx1211.com/sms/ip
    
    1
    • 该参数指定包含 POST 数据的文件。通常配合 -T 参数指定数据类型。

    # 4. -T:指定请求体的内容类型

    ab -T "application/json" https://api-test.sx1211.com/sms/ip
    
    1
    • 该参数指定请求体的内容类型,例如 application/json、application/x-www-form-urlencoded 等。

    # 5. -H:指定请求头

    ab -H "Authorization: Bearer <your_token>" https://api-test.sx1211.com/sms/ip
    
    1
    • 该参数用于指定自定义的请求头,可以添加 Token、Cookie 等认证信息。

    # 6. -v:设置详细输出

    ab -v 2 https://api-test.sx1211.com/sms/ip
    
    1
    • 该参数用于控制输出的详细程度,-v 2 输出详细的请求和响应信息,便于调试。

    # 7. -k:启用 Keep-Alive

    ab -k https://api-test.sx1211.com/sms/ip
    
    1
    • 启用 HTTP Keep-Alive,使得多个请求复用同一个连接,减少连接建立的开销。

    # 四、返回结果分析

    ApacheBench 的输出包含了多个重要指标,帮助我们分析服务器的性能表现。以下是常见的返回结果字段及其含义:

    # 1. Requests per second(每秒请求数)

    Requests per second:    37.87 [#/sec] (mean)
    
    1
    • 该字段表示服务器每秒能处理的请求数,反映了服务器的吞吐量。高吞吐量意味着服务器能够在单位时间内处理更多请求。

    # 2. Time per request(每请求耗时)

    Time per request:       264.075 [ms] (mean)
    
    1
    • 该字段表示每个请求的平均响应时间,单位是毫秒(ms)。响应时间越低,表示服务器的响应越快。

    # 3. Total transferred(总传输字节数)

    Total transferred:      145800 bytes
    
    1
    • 该字段表示所有请求的总数据传输量,单位是字节。可以用来评估服务器的带宽使用情况。

    # 4. Failed requests(失败请求数)

    Failed requests:        0
    
    1
    • 该字段表示请求过程中发生的失败请求数量。如果失败请求数大于 0,表示服务器存在问题,可能是由于负载过大或配置问题。

    # 5. Connection Times(连接时间)

    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:       49  112  39.5    107     203
    
    1
    2
    3
    • 该部分显示了连接建立和请求处理的时间,包括:
      • Connect:连接服务器所需时间。
      • Processing:请求处理的时间。
      • Waiting:请求等待服务器处理的时间。
      • Total:连接建立和处理的总时间。

    # 6. 百分比响应时间

    Percentage of the requests served within a certain time (ms)
      50%    239
      66%    255
      75%    268
      80%    285
      90%    319
      95%    343
      98%    373
      99%    386
     100%    386 (longest request)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    • 这部分显示了不同百分比的请求响应时间,反映了请求的分布情况。例如,50% 的请求响应时间在 239ms 以下,99% 的请求响应时间在 386ms 以下。

    # 总结

    本文详细介绍了 ApacheBench 的用法,包括如何发送不同格式的 POST 请求、如何在请求头中带上 Token 和 Cookie 进行身份验证,以及 ApacheBench 的各项参数及返回结果的分析。通过这些测试,你可以评估服务器在不同条件下的表现,优化性能,并确保服务器能够应对大流量的并发请求。

    在线编辑 (opens new window)
    上次更新: 2025/02/25, 18:30:54
    nginx在linux上操作
    Docker

    ← nginx在linux上操作 Docker→

    最近更新
    01
    showprocess用法
    04-29
    02
    vue3中尖括号和冒号的使用细则
    04-29
    03
    sd使用
    02-22
    更多文章>
    🖥️

    © 2025窝窝侠 💌 豫ICP备20005263号-2 🛀 Theme by 💝 Vdoing && 小胖墩er

    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×