每天掌握一个Linux命令 - ab(Apache Benchmark)

Linux 命令工具 ab 使用指南

一、工具概述

ab(Apache Benchmark) 是 Apache 官方提供的开源压力测试工具,用于衡量 Web 服务器的性能。它通过模拟多并发请求,测试服务器在高负载下的响应速度、吞吐量和稳定性,常用于评估网站或 API 的性能表现。

核心特点

  • 轻量级:无需复杂安装,适合快速测试。
  • 高可配置性:支持自定义并发数、请求次数、请求头、超时时间等参数。
  • 结果清晰:输出包含请求总数、失败率、吞吐量、平均响应时间等关键指标。

二、安装方式

1. Debian/Ubuntu 系统

sudo apt update
sudo apt install apache2-utils  # ab 包含在该软件包中

2. CentOS/RHEL 系统

sudo yum install httpd-tools

3. 源码编译安装(适用于其他 Linux 系统)

# 下载 Apache 源码包
wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz
wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz
wget https://downloads.apache.org/httpd/httpd-2.4.57.tar.gz# 编译安装 APR 和 APR-Util
tar -zxvf apr-1.7.0.tar.gz
cd apr-1.7.0
./configure
make && sudo make installcd ..
tar -zxvf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
./configure --with-apr=/usr/local/apr
make && sudo make install# 编译安装 httpd(含 ab 工具)
cd ..
tar -zxvf httpd-2.4.57.tar.gz
cd httpd-2.4.57
./configure --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
make && sudo make install
# ab 工具路径:/usr/local/apache2/bin/ab

三、核心功能

功能分类说明
并发测试模拟多用户同时访问,测试服务器对并发连接的处理能力。
吞吐量统计计算服务器每秒处理的请求数(Requests per second)。
响应时间分析统计请求的平均响应时间、最大/最小响应时间及时间分布(如 50%/95% 耗时)。
自定义请求支持设置请求方法(GET/POST)、请求头、请求体、URL 参数等。
长连接测试支持保持 HTTP 连接(-k 参数),测试持久连接性能。

四、基础用法

基本语法

ab [选项] [目标 URL]

常用选项说明

选项描述
-n总请求次数(必填)。
-c并发用户数(必填)。
-t测试持续时间(秒),与 -n 二选一。
-k启用 HTTP 长连接(keep-alive)。
-H添加请求头,格式:-H "Header: Value"(可多次使用)。
-p指定 POST 请求的参数文件(文件内容为参数,如 key=value)。
-T设置 POST 请求的 Content-Type,如 -T "application/x-www-form-urlencoded"
-v输出详细信息,数值越大越详细(如 -v 4)。

示例:GET 请求基础测试

# 测试百度首页,100 个请求,5 个并发
ab -n 100 -c 5 http://www.baidu.com/

输出结果解读

Concurrency Level:      5        # 并发数
Time taken for tests:   0.323秒   # 总耗时
Complete requests:      100      # 完成请求数
Failed requests:        0        # 失败请求数(非 2xx/3xx 状态码)
Total transferred:      138700 bytes # 传输总数据量
HTML transferred:       131610 bytes # HTML 内容大小
Requests per second:    309.60 [#/sec] (mean) # 吞吐量(QPS)
Time per request:       16.150 [ms] (mean)   # 平均每个请求的耗时(所有并发)
Time per request:       3.230 [ms] (mean, across all concurrent requests) # 单个并发的平均耗时
Transfer rate:          417.57 [Kbytes/sec] received # 数据传输速率

五、进阶操作

1. POST 请求测试

# 通过 -p 指定参数文件(post_data.txt 内容:username=test&password=123)
ab -n 50 -c 10 -p post_data.txt -T "application/x-www-form-urlencoded" http://api.example.com/login

2. 自定义请求头

# 添加自定义认证头和 Content-Type
ab -n 100 -c 20 -H "Authorization: Bearer your_token" -H "Content-Type: application/json" http://api.example.com/data

3. 长连接测试(-k)

ab -n 500 -c 50 -k http://example.com/static-files

4. 限制测试时间(-t)

# 持续测试 30 秒,自动计算请求次数
ab -c 100 -t 30 http://video.example.com/stream

5. 输出详细调试信息(-v)

ab -v 4 -n 10 -c 2 http://localhost:8080/api # 显示请求头、响应状态码等细节

六、实战案例

案例:测试 Nginx 静态文件服务器性能

场景:模拟 200 个并发用户,持续请求 60 秒,测试 /images 目录下的图片文件。

ab -c 200 -t 60 -k http://nginx-server/images/

预期目标

  • 吞吐量(QPS)稳定在 5000+
  • 平均响应时间 < 50ms
  • 失败请求数为 0

优化方向

  • 若 QPS 不足,可调整 Nginx 的 worker_connections 或开启缓存(proxy_cache)。
  • 若响应时间过高,检查磁盘 I/O 或网络带宽瓶颈。

七、注意事项

1. 服务器安全

  • 避免对生产环境直接进行压测,建议先在预发布环境测试。
  • 控制并发数和请求频率,防止压测导致服务崩溃(可逐步增加 -c 参数)。

2. 测试局限性

  • ab 是单进程工具,无法完全模拟真实用户行为(如浏览器渲染、JS 执行)。
  • 高并发下可能受限于客户端机器性能(如 CPU/网络带宽),需确保客户端资源充足。

3. 参数调优

  • 若出现 connect() failed 错误,可能是客户端端口耗尽,可临时调整系统参数:
    sudo sysctl -w net.ipv4.ip_local_port_range="1024 65535"
    
  • 对于 HTTPS 测试,需使用 -S(SSL 证书)和 -P(客户端证书)参数,或改用其他工具(如 wrk)。

4. 结果解读

  • 关注 失败请求数(非 2xx/3xx 状态码)和 异常耗时分布(如 95% 耗时突然升高)。
  • 多次测试取平均值,避免单次结果受临时因素干扰。

通过以上指南,可快速掌握 ab 的核心用法,结合实际场景进行性能测试和优化。对于更复杂的负载场景,可考虑使用 wrkJMeter 等专业工具补充测试。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI的“空间盲症“

<------最重要的是订阅“鲁班模锤”------> 当我们看到一张照片时&#xff0c;大脑会自动分析其中的空间关系——哪个物体在前&#xff0c;哪个在后&#xff0c;左边是什么&#xff0c;右边是什么。但对于当今最先进的AI系统来说&#xff0c;这种看似简单的空间理解却是…

数据拟合实验

实验类型&#xff1a;●验证性实验 ○综合性实验 ○设计性实验 实验目的: 进一步熟练掌握最小二乘多项式拟合算法&#xff0c;提高编程能力和解决拟合问题的实践技能。 实验内容&#xff1a; 1 对下列数据&#xff0c;求解最小二乘抛物线f(x)Ax2BxC x -3 -1 1 3 y 15 5 …

系统思考:心智模式与业务创新

在最近的项目交付讨论中&#xff0c;我频繁听到一个词&#xff1a;“缺合适的人”。这让我陷入了深思&#xff1a;我们是否还在传统的生产力概念&#xff1f;纳瓦尔提出的三种杠杆&#xff1a;劳动力、资本、零边际成本产品。在当今这个信息化、全球化的商业世界中&#xff0c;…

python分步合并处理excel数据

文章目录 概要整体架构流程技术名词解释技术细节小结概要 客户需求 1. 背景与目标 用户需要将三个包含农业实验数据的Excel表格(AK、AN、AP)合并为一个结构化数据集,用于后续分析。每个表格包含相同类型的字段(如对照组与PSB处理组的样本数、均值、标准差),但需通过字…

Python爬虫实战:研究PyQuery库相关技术

1. 引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的数据量呈爆炸式增长。如何高效地从海量的网页数据中提取有价值的信息,成为当前信息技术领域的一个重要研究方向。网络爬虫作为一种自动获取网页内容的程序,能够按照一定的规则,自动地抓取万维网信息,在搜索引擎…

深度学习---注意力机制(Attention Mechanism)

一、核心概念与发展背景 注意力机制是深度学习中模拟人类注意力选择能力的关键技术&#xff0c;旨在从海量信息中筛选关键特征&#xff0c;解决长序列信息处理中的瓶颈问题&#xff08;如RNN的梯度消失&#xff09;。其核心思想是&#xff1a;对输入序列的不同部分分配不同权重…

Jenkins分配对应项目权限与用户管理

在日常开发过程中经常会出现用户和权限管理问题&#xff0c;没有配置trigger时&#xff0c;通常需要我们手动构建&#xff0c;但此时前端和后端的朋友没有build权限&#xff0c;导致每次dev环境测试都需要麻烦我们手动去构建&#xff0c;消息传达不及时则会降低开发效率。 现有…

XCTF-web-file_include

解析 <?php highlight_file(__FILE__); // 高亮显示当前PHP文件源代码 include("./check.php"); // 包含检查文件&#xff08;可能包含安全过滤逻辑&#xff09;if(isset($_GET[filename])) { // 检查是否传入filename参数$filename $_GET[f…

matlab全息技术中的菲涅尔仿真成像

matlab全息技术中的菲涅尔仿真成像程序。 傅里叶法&#xff08;重建距离得大&#xff09;/Fresnel.m , 545 傅里叶法&#xff08;重建距离得大&#xff09;/FresnelB.m , 548 傅里叶法&#xff08;重建距离得大&#xff09;/Fresnel_solution.m , 1643 傅里叶法&#xff08;重…

CS144 - LAB0

CS144 - Lab 0 telnet 发送请求 如图&#xff0c;很简单&#xff0c;但是注意输入时间太久会超时 发邮箱 首先我们需要用命令行去发邮箱&#xff0c;这里我用企业微信邮箱给自己的 qq 邮箱发送~ 整个命令如下&#xff01; 对于其中的参数&#xff0c;其实从英文就可以看出来…

kafka SASL/PLAIN 认证及 ACL 权限控制

一、Zookeeper 配置 SASL/PLAIN 认证&#xff08;每个zookeeper节点都要做&#xff09; 1.1 在 zookeeper 的 conf 目录下&#xff0c;创建 zk_server_jaas.conf 文件&#xff0c;内容如下 Server {org.apache.kafka.common.security.plain.PlainLoginModule requiredusernam…

20250528-C#知识:函数简介及函数重载

C#知识&#xff1a;函数简介及函数重载 本文主要介绍函数参数和函数重载相关的知识点 1、函数 函数一般写在类中 一般函数调用 static int Add(int num, int value){num value;return num;}//一般函数调用&#xff0c;发生值类型参数的复制int num 1;Add(num, 1); //调用…

Vue内置指令与自定义指令

一、前言 在 Vue 开发中&#xff0c;指令&#xff08;Directives&#xff09; 是一种非常强大的特性&#xff0c;它允许我们以声明式的方式操作 DOM。Vue 提供了一些常用的内置指令&#xff0c;如 v-if、v-show、v-bind、v-on 等&#xff0c;同时也支持开发者根据需求创建自己…

华为AP6050DN无线接入点瘦模式转胖模式

引言 华为AP6050DN是一款企业级商用的无线接入点。由于产品定位原因,其默认工作在瘦模式下,即须经AC统一控制和管理,是不能直接充当普通的无线路由器来使用的。 而本文的目的,就是让其能脱离AC的统一控制和管理,当作普通无线路由器来使用。 硬件准备 华为AP6050DN无线接…

程序员出海之英语-使用手册

为什么现在实时翻译工具这么牛逼了&#xff0c;AI转译这么准确了&#xff0c;我还在这里跟老古董一样吭哧吭哧学英语呢&#xff1f; 这是因为我们始终是和人打交道&#xff0c;不仅仅是为了考试&#xff0c;看懂官方文章&#xff0c;听懂官方视频。这里为什么说官方&#xff0c…

Java 事务管理:在分布式系统中实现可靠的数据一致性

Java 事务管理&#xff1a;在分布式系统中实现可靠的数据一致性 在当今的软件开发领域&#xff0c;分布式系统逐渐成为主流架构。然而&#xff0c;这也给事务管理带来了巨大的挑战。本文将深入探讨 Java 事务管理在分布式系统中的关键要点&#xff0c;并通过详细代码实例展示如…

微信小程序关于截图、录屏拦截

1.安卓 安卓&#xff1a; 在需要禁止的页面添加 onShow() {if (wx.setVisualEffectOnCapture) {wx.setVisualEffectOnCapture({visualEffect: hidden,complete: function(res) {}})}},// 页面隐藏和销毁时需要释放防截屏录屏设置onHide() {if (wx.setVisualEffectOnCapture) {w…

使用 PySpark 从 Kafka 读取数据流并处理为表

使用 PySpark 从 Kafka 读取数据流并处理为表 下面是一个完整的指南&#xff0c;展示如何通过 PySpark 从 Kafka 消费数据流&#xff0c;并将其处理为可以执行 SQL 查询的表。 1. 环境准备 确保已安装: Apache Spark (包含Spark SQL和Spark Streaming)KafkaPySpark对应的Ka…

第十天的尝试

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 哈哈&#xff0c;十天缺了两天&#xff0c;我写的文章现在质量不高&#xff0c;所以我可能考虑&#xff0c;应该一星期或者三四天出点高质量的文章&#xff0c;同时很开心大家能够学到知识&a…

mediapipe标注视频姿态关键点(基础版加进阶版)

前言 手语视频流的识别有两种大的分类&#xff0c;一种是直接将视频输入进网络&#xff0c;一种是识别了关键点之后再进入网络。所以这篇文章我就要来讲讲如何用mediapipe对手语视频进行关键点标注。 代码 需要直接使用代码的&#xff0c;我就放这里了。环境自己配置一下吧&…