深入浅出 AB 压测工具:从入门到精通

AB(ApacheBench)是一款轻量级、易用且功能强大的 HTTP 服务器性能测试工具。它能够模拟多个并发用户对服务器发起请求,并统计服务器的响应时间、吞吐量等性能指标,帮助开发者评估服务器性能、发现性能瓶颈。本文将深入探讨 AB 压测工具,涵盖使用场景、语法、案例、最佳实践以及高级技巧,助您从入门到精通。

一、AB 压测工具使用场景

AB 压测工具适用于各种需要进行 HTTP 服务器性能测试的场景,例如:

  • Web 服务器性能评估: 测试 Web 服务器在不同并发用户数下的响应时间、吞吐量等性能指标,评估服务器性能表现。
  • API 接口性能测试: 测试 API 接口在不同并发请求数下的响应时间、错误率等性能指标,评估接口性能表现。
  • 负载测试: 模拟高并发场景,测试服务器在高负载情况下的稳定性和性能表现,发现潜在的性能瓶颈。
  • 性能优化验证: 在进行服务器性能优化后,使用 AB 压测工具验证优化效果,确保优化措施有效。
     

二、AB 压测工具语法

AB 压测工具的基本语法如下:

ab [options] [http[s]://]hostname[:port]/path

其中,options 是可选参数,用于指定测试的具体细节,例如并发用户数、请求总数等。hostname 是服务器的域名或 IP 地址,port 是服务器的端口号(默认为 80),path 是请求的路径。

常用选项解析:

三、AB 压测工具案例

案例 1:测试 Web 服务器性能

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

该命令表示模拟 100 个并发用户,总共发送 1000 个请求到 http://www.example.com/,并统计服务器的响应时间、吞吐量等性能指标。

案例 2:测试 API 接口性能

ab -n 1000 -c 100 -T "application/json" -p data.json http://api.example.com/v1/users

该命令表示模拟 100 个并发用户,总共发送 1000 个 POST 请求到 http://api.example.com/v1/users,请求体为 data.json 文件中的 JSON 数据,并统计 API 接口的响应时间、错误率等性能指标。

四、一个案例

ab -n 1000 -c 100 Example Domain

% ab -n 1000 -c 100 http://www.example.com/
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.example.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
  • ab -n 1000 -c 100 http://www.example.com/:这是 AB 压测命令,表示模拟 100 个并发用户(-c 100),总共发送 1000 个请求(-n 1000)到 http://www.example.com/
  • Benchmarking www.example.com (be patient):开始对目标服务器进行性能测试。
  • Completed X requests:实时显示已完成的请求数。

Server Software:        
Server Hostname:        www.example.com
Server Port:            80
  • Server Software:服务器的软件信息(例如 Apache、Nginx)。如果未识别,则显示为空。
  • Server Hostname:测试的目标服务器主机名。
  • Server Port:测试的目标服务器端口号(默认为 80)\

Document Path:          /
Document Length:        1256 bytes
  • Document Path:测试的请求路径(例如 / 表示根路径)。
  • Document Length:服务器返回的响应内容长度(单位为字节)。

Concurrency Level:      100
Time taken for tests:   40.719 seconds
Complete requests:      1000
Failed requests:        3
   (Connect: 0, Receive: 0, Length: 3, Exceptions: 0)
Non-2xx responses:      3
Total transferred:      1519488 bytes
HTML transferred:       1254430 bytes
  • Concurrency Level:并发用户数(-c 100 表示 100 个并发用户)。
  • Time taken for tests:完成所有请求的总时间(40.719 秒)。
  • Complete requests:成功完成的请求数(1000 个)。
  • Failed requests:失败的请求数(3 个)。
    • Connect:连接失败数(0 个)。
    • Receive:接收数据失败数(0 个)。
    • Length:响应内容长度不一致的失败数(3 个)。
    • Exceptions:其他异常失败数(0 个)。
  • Non-2xx responses:非 2xx 状态码的响应数(3 个)。
  • Total transferred:所有请求的总数据传输量(1519488 字节)。
  • HTML transferred:所有请求的 HTML 内容总传输量(1254430 字节)。

Requests per second:    24.56 [#/sec] (mean)
Time per request:       4071.900 [ms] (mean)
Time per request:       40.719 [ms] (mean, across all concurrent requests)
Transfer rate:          36.44 [Kbytes/sec] received

说明:

  • Requests per second:每秒处理的请求数(24.56 个/秒),即服务器的吞吐量。
  • Time per request
    • 4071.900 [ms] (mean):每个请求的平均响应时间(从客户端角度看)。
    • 40.719 [ms] (mean, across all concurrent requests):每个请求的平均响应时间(从服务器角度看)。
  • Transfer rate:数据传输速率(36.44 KB/秒),表示每秒从服务器接收的数据量。

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0  208 180.8    182    3180
Processing:   166  400 2087.4    184   34717
Waiting:      166  345 2025.1    183   35062
Total:        334  607 2093.2    367   34717
  • Connection Times:连接时间的统计信息(单位为毫秒)。
    • Connect:建立连接的时间。
      • min:最小连接时间(0 毫秒)。
      • mean:平均连接时间(208 毫秒)。
      • [+/-sd]:连接时间的标准差(180.8 毫秒)。
      • median:连接时间的中位数(182 毫秒)。
      • max:最大连接时间(3180 毫秒)。
    • Processing:服务器处理请求的时间。
    • Waiting:客户端等待服务器响应的时间。
    • Total:从建立连接到接收完数据的总时间。
Percentage of the requests served within a certain time (ms)
  50%    367
  66%    372
  75%    377
  80%    380
  90%    550
  95%   1128
  98%   2087
  99%   3590

说明:

  • Percentage of the requests served within a certain time (ms):请求响应时间的分布情况。
    • 50%:50% 的请求在 367 毫秒内完成。
    • 66%:66% 的请求在 372 毫秒内完成。
    • 75%:75% 的请求在 377 毫秒内完成。
    • 80%:80% 的请求在 380 毫秒内完成。
    • 90%:90% 的请求在 550 毫秒内完成。
    • 95%:95% 的请求在 1128 毫秒内完成。
    • 98%:98% 的请求在 2087 毫秒内完成。
    • 99%:99% 的请求在 3590 毫秒内完成。

五、小结

通过 AB 压测工具的输出,您可以全面了解服务器的性能表现,包括:

  • 吞吐量:每秒处理的请求数(Requests per second)。
  • 响应时间:每个请求的平均响应时间(Time per request)。
  • 失败率:失败请求的比例(Failed requests)。
  • 数据传输:总数据传输量和速率(Total transferred 和 Transfer rate)。
  • 响应时间分布:不同百分比的请求响应时间(Percentage of the requests served)。

这些数据可以帮助您评估服务器的性能瓶颈,优化系统配置,提升用户体验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/960660.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何将电脑桌面默认的C盘设置到D盘?详细操作步骤!

将电脑桌面默认的C盘设置到D盘的详细操作步骤&#xff01; 本博文介绍如何将电脑桌面&#xff08;默认为C盘&#xff09;设置在D盘下。 首先&#xff0c;在D盘建立文件夹Desktop&#xff0c;完整的路径为D:\Desktop。winR&#xff0c;输入Regedit命令。&#xff08;或者单击【…

网络工程师 (3)指令系统基础

一、寻址方式 &#xff08;一&#xff09;指令寻址 顺序寻址&#xff1a;通过程序计数器&#xff08;PC&#xff09;加1&#xff0c;自动形成下一条指令的地址。这是计算机中最基本、最常用的寻址方式。 跳跃寻址&#xff1a;通过转移类指令直接或间接给出下一条指令的地址。跳…

Games104——高级动画技术:动画树、IK和表情动画

这里写目录标题 动画混合数学混合&#xff1a;线性插值混合空间Blend Space1D Blend Space2D Blend SpaceSkeleton Masked Blending骨骼遮罩混合Addictive Blending 动画状态机Animation State Machine&#xff08;ASM&#xff09;动画状态机定义节点&#xff1a;分为clip和ble…

【Rust自学】15.6. RefCell与内部可变性:“摆脱”安全性限制

题外话&#xff0c;这篇文章一共4050字&#xff0c;是截止到目前为止最长的文章&#xff0c;如果你能坚持读完并理解&#xff0c;那真的很强&#xff01; 喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以…

lightweight-charts-python 包 更新 lightweight-charts.js 的方法

lightweight-charts-python 是 lightweight-charts.js 的 python 包装&#xff0c;非常好用 lightweight-charts 更新比较频繁&#xff0c;导致 lightweight-charts-python 内置的 lightweight-charts 经常不是最新的。 新的 lightweight-charts 通常可以获得性能改进和bug修复…

2025多目标优化创新路径汇总

多目标优化是当下非常热门且有前景的方向&#xff01;作为AI领域的核心技术之一&#xff0c;其专注于解决多个相互冲突的目标的协同优化问题&#xff0c;核心理念是寻找一组“不完美但均衡”的“帕累托最优解”。在实际中&#xff0c;几乎处处都有它的身影。 但随着需求场景的…

Python从0到100(八十五):神经网络-使用迁移学习完成猫狗分类

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…

第4章 神经网络【1】——损失函数

4.1.从数据中学习 实际的神经网络中&#xff0c;参数的数量成千上万&#xff0c;因此&#xff0c;需要由数据自动决定权重参数的值。 4.1.1.数据驱动 数据是机器学习的核心。 我们的目标是要提取出特征量&#xff0c;特征量指的是从输入数据/图像中提取出的本质的数 …

深度学习|表示学习|卷积神经网络|详细推导每一层的维度变化|14

如是我闻&#xff1a; 一个经典的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;呈现的是输入图像通过多个卷积层、池化层以及全连接层&#xff0c;最终输出分类结果的过程。整个过程的核心是理解输入特征图的尺寸如何在每一层发生变化&#xff0c;我们可以通过卷积…

java基础——专题一 《面向对象之前需要掌握的知识》

目录 Δ前言 一、拾枝杂谈 1.Java是什么&#xff1f; 2.计组前瞻&#xff1a; 3.JDK&#xff0c;JRE&#xff0c;JVM&#xff1f; 二、环境搭建 1.JDK安装和配置&#xff1a; 1.1 人话 1.2 JDK的配置 1.3 如何切换JDK的版本&#xff1f; 2.DOS的简单使用&#xff1a; 2.1 介…

强化学习数学原理(三)——值迭代

一、值迭代过程 上面是贝尔曼最优公式&#xff0c;之前我们说过&#xff0c;f(v)v&#xff0c;贝尔曼公式是满足contraction mapping theorem的&#xff0c;能够求解除它最优的策略和最优的state value&#xff0c;我们需要通过一个最优v*&#xff0c;这个v*来计算状态pi*&…

2025蓝桥杯JAVA编程题练习Day1

1.刑侦科推理试题 题目描述 有以下10道单选题&#xff0c;编程求这10道题的答案。 这道题的答案是&#xff1a; A. A B. B C. C D. D 第5题的答案是&#xff1a; A. C B. D C. A D. B 以下选项中哪一题的答案与其他三项不同&#xff1a; A. 第3题 B. 第6题 C. 第2题 D.…

内存泄漏的通用排查方法

本文聊一聊如何系统性地分析查找内存泄漏的具体方法&#xff0c;但不会具体到哪种语言和具体业务代码逻辑中&#xff0c;而是会从 Linux 系统上通用的一些分析方法来入手。这样&#xff0c;不论你使用什么开发语言&#xff0c;不论你在开发什么&#xff0c;它总能给你提供一些帮…

定时器按键tim_key模版

低优先级放在高优先级内势必是程序卡死 把高优先级放到低优先级内&#xff0c;会使程序卡死 可修改 Debuger调试方法 Pwm rcc #include "my_main.h" uint8_t led_sta0x10; char text[30]; void LED_Disp(uint8_t dsLED) {HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPI…

MacOS 如何解决无法打开 ‘xxx’,因为 Apple 无法检查其是否包含恶意软件

背景 在安装软件时&#xff0c;遇到“无法打开 ‘xxx’&#xff0c;因为 Apple 无法检查其是否包含恶意软件” 的提示&#xff0c;许多用户可能会感到困惑&#xff0c;不知道该如何处理。遇到这个问题时&#xff0c;按以下步骤操作即可解决。 首先&#xff0c;这个警告提示的出…

数据结构与算法学习笔记----求组合数

数据结构与算法学习笔记----求组合数 author: 明月清了个风 first publish time: 2025.1.27 ps⭐️一组求组合数的模版题&#xff0c;因为数据范围的不同要用不同的方法进行求解&#xff0c;涉及了很多之前的东西快速幂&#xff0c;逆元&#xff0c;质数&#xff0c;高精度等…

柔性数组与c/c++程序中内存区域的划分

1.柔性数组 1.1柔性数组的定义 柔性数组是指在结构体中定义的&#xff0c;其大小在编译时未确定&#xff0c;而在运行时动态分配的数组。这种数组允许结构体的大小根据需要动态变化。语法如下&#xff1a; struct D {int a;int arry1[0]; };struct F {int a;int arry2[]; };…

Vivado生成X1或X4位宽mcs文件并固化到flash

1.生成mcs文件 01.在vivado里的菜单栏选择"tools"工具栏 02.在"tools"里选择"生成内存配置文件" 03.配置参数 按照FPGA板上的flash型号进行选型&#xff0c;相关配置步骤可参考下图。 注意&#xff1a;Flash数据传输位宽如果需要选择X4位宽&am…

云原生:构建现代化应用的基石

一、什么是云原生&#xff1f; 云原生是一种构建和运行应用程序的方法&#xff0c;旨在充分利用云计算的分布式系统优势&#xff0c;例如弹性伸缩、微服务架构、容器化技术等。云原生应用程序从设计之初就考虑到了云环境的特点&#xff0c;能够更好地适应云平台的动态变化&…

力扣动态规划-12【算法学习day.106】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…