Linux ab命令介绍
ab是Apache HTTP server benchmarking tool的缩写,它可以创建多个并发访问线程,模拟多个用户同时对某个URL地址进行访问,从而测试Apache服务器的性能。它可以显示服务器的吞吐率(每秒处理的请求数)、并发连接数、响应时间等指标,帮助你评估服务器的负载能力和稳定性。ab命令不仅可以测试Apache服务器,也可以测试其他类型的Web服务器,如nginx、tomcat、IIS等。
Linux ab命令适用的Linux版本
ab命令是Apache自带的压力测试工具,因此,只要安装了Apache,就可以使用ab命令。不同的Linux发行版,安装Apache的方法可能不同,下面列出了一些常见的Linux发行版的安装命令:
- Ubuntu/Debian:
sudo apt-get install apache2
- CentOS/RedHat:
sudo yum install httpd
- Fedora:
sudo dnf install httpd
- Arch Linux:
sudo pacman -S apache
- openSUSE:
sudo zypper install apache2
如果你使用的是其他的Linux发行版,你可以参考Apache官网的安装指南,或者使用源码编译的方式安装Apache。
如果你要使用ab命令测试HTTPS协议的URL,你还需要安装openssl,否则会报错SSL not compiled in
。安装openssl的命令如下:
- Ubuntu/Debian:
sudo apt-get install openssl
- CentOS/RedHat:
sudo yum install openssl
- Fedora:
sudo dnf install openssl
- Arch Linux:
sudo pacman -S openssl
- openSUSE:
sudo zypper install openssl
如果你使用的是其他的Linux发行版,你可以参考openssl官网的安装指南,或者使用源码编译的方式安装openssl。
Linux ab命令的基本语法
ab命令的基本语法格式如下:
ab [options] [http[s]://]hostname[:port]/path
其中,options
是一些可选的参数,用来控制测试的条件和输出的格式,hostname
是要测试的服务器的主机名或IP地址,port
是要测试的服务器的端口号,默认是80,path
是要测试的服务器的路径,可以是一个文件或一个目录。
Linux ab命令的常用选项或参数说明
ab命令有很多可选的参数,可以用来调整测试的条件和输出的格式,下面列出了一些常用的参数,如果想查看完整的参数列表,可以使用ab -h
命令查看帮助信息。
参数 | 说明 |
---|---|
-n requests | 指定测试会话中执行的请求个数,默认是一个请求 |
-c concurrency | 指定一次产生的并发请求数,即模拟的用户数,默认是一个用户 |
-t timelimit | 指定测试的最大时间,单位是秒,如果在指定的时间内没有完成测试,会强制结束测试 |
-k | 启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求,默认是关闭的 |
-v verbosity | 设置输出的详细程度,取值范围是0-4,0表示只输出基本信息,4表示输出最详细的信息 |
-T content-type | 设置POST或PUT请求的内容类型,比如application/x-www-form-urlencoded 或text/plain 等 |
-p postfile | 指定一个文件,其中包含了要POST的数据,需要同时设置-T参数 |
-u putfile | 指定一个文件,其中包含了要PUT的数据,需要同时设置-T参数 |
-H header | 添加自定义的HTTP请求头,比如Accept-Encoding: gzip 等 |
-A auth-username:password | 设置基本的WWW认证信息,用户名和密码用冒号分隔,并用base64编码发送 |
-P proxy-auth-username:password | 设置基本的代理认证信息,用户名和密码用冒号分隔,并用base64编码发送 |
-X proxy:port | 设置代理服务器的地址和端口号 |
-C cookie-name=value | 添加一个Cookie,可以重复使用该参数添加多个Cookie |
-e csv-file | 输出一个CSV格式的文件,其中包含了每个百分比(从1%到100%)的响应时间 |
-g gnuplot-file | 输出一个gnuplot格式的文件,其中包含了所有的测试数据,可以用来绘制图表 |
-d | 不显示百分比的响应时间表 |
-S | 不显示置信区间和警告信息 |
-r | 不因为网络错误而退出测试 |
-f protocol | 指定SSL/TLS协议,可以是SSL2, SSL3, TLS1或ALL |
-Z ciphersuite | 指定SSL/TLS加密套件,可以参考openssl ciphers的说明 |
Linux ab命令的实例
下面给出了一些使用ab命令的实例,展示了不同参数的效果。
实例1:测试Linux入门自学网首页的性能
命令:
[linux@bashcommandnotfound.cn ~]$ ab -n 100 -c 10 http://bashcommandnotfound.cn/
输出:
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking bashcommandnotfound.cn (be patient).....done
Server Software: BWS/1.1
Server Hostname: bashcommandnotfound.cn
Server Port: 80
Document Path: /
Document Length: 238 bytes
Concurrency Level: 10
Time taken for tests: 1.264 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Non-2xx responses: 100
Total transferred: 35900 bytes
HTML transferred: 23800 bytes
Requests per second: 79.11 [#/sec] (mean)
Time per request: 126.402 [ms] (mean)
Time per request: 12.640 [ms] (mean, across all concurrent requests)
Transfer rate: 27.72 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 11 14 1.9 14 18
Processing: 97 110 7.8 109 133
Waiting: 96 109 7.8 108 132
Total: 109 124 7.9 123 147
Percentage of the requests served within a certain time (ms)
50% 123
66% 125
75% 127
80% 128
90% 133
95% 140
98% 144
99% 147
100% 147 (longest request)
注释:
- 这个命令使用了-n和-c参数,指定了测试会话中执行100个请求,每次并发10个请求,即模拟10个用户同时访问Linux入门自学网首页。
- 输出的结果包括了服务器的软件、主机名、端口号、文档路径、文档长度等信息,以及测试的时间、请求数、失败请求数、传输字节数、吞吐率、响应时间、连接时间等指标,还有一个百分比的响应时间表,显示了不同百分比的请求在多少毫秒内完成
好的,我会继续为你讲解ab命令的使用方法,并生成一个网站的内容,对Linux命令进行SEO优化。下面是我为你准备的内容的后半部分:
实例2:测试HTTPS协议的URL
命令:
[linux@bashcommandnotfound.cn ~]$ ab -n 100 -c 10 -f TLS1 https://www.google.com/
输出:
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.google.com (be patient).....done
Server Software: gws
Server Hostname: www.google.com
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-ECDSA-CHACHA20-POLY1305,256,256
Server Temp Key: ECDH P-256 256 bits
TLS Server Name: www.google.com
Document Path: /
Document Length: 12713 bytes
Concurrency Level: 10
Time taken for tests: 0.774 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Non-2xx responses: 100
Total transferred: 1339300 bytes
HTML transferred: 1271300 bytes
Requests per second: 129.18 [#/sec] (mean)
Time per request: 77.395 [ms] (mean)
Time per request: 7.740 [ms] (mean, across all concurrent requests)
Transfer rate: 1688.88 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 14 17 2.4 16 23
Processing: 51 59 6.9 58 77
Waiting: 50 58 6.9 57 76
Total: 66 76 7.6 75 97
Percentage of the requests served within a certain time (ms)
50% 75
66% 77
75% 79
80% 81
90% 86
95% 91
98% 95
99% 97
100% 97 (longest request)
注释:
- 这个命令使用了-f参数,指定了测试HTTPS协议的URL,使用TLS1作为SSL/TLS协议,如果不指定-f参数,ab命令会自动选择最佳的SSL/TLS协议。
- 输出的结果除了基本的信息和指标外,还包括了服务器的SSL/TLS协议、加密套件、临时密钥、服务器名称等信息。
实例3:测试POST请求的性能
命令:
[linux@bashcommandnotfound.cn ~]$ ab -n 100 -c 10 -T application/x-www-form-urlencoded -p data.txt https://httpbin.org/post
输出:
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking httpbin.org (be patient).....done
Server Software: gunicorn/19.9.0
Server Hostname: httpbin.org
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128
Server Temp Key: ECDH P-256 256 bits
TLS Server Name: httpbin.org
Document Path: /post
Document Length: 427 bytes
Concurrency Level: 10
Time taken for tests: 2.135 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 58900 bytes
Total body sent: 2300
HTML transferred: 42700 bytes
Requests per second: 46.83 [#/sec] (mean)
Time per request: 213.537 [ms] (mean)
Time per request: 21.354 [ms] (mean, across all concurrent requests)
Transfer rate: 26.94 [Kbytes/sec] received
1.05 kb/s sent
28.00 kb/s total
Connection Times (ms)
min mean[+/-sd] median max
Connect: 15 18 2.5 18 24
Processing: 178 193 14.0 191 240
Waiting: 177 192 14.0 190 239
Total: 194 211 14.3 209 258
Percentage of the requests served within a certain time (ms)
50% 209
66% 214
75% 218
80% 221
90% 233
95% 244
98% 254
99% 258
100% 258 (longest request)
注释:
- 这个命令使用了-T和-p参数,指定了测试POST请求的内容类型和数据文件,data.txt文件的内容是
name=Tony&email=tony@tonyteaches.tech
,即一个表单的数据。 - 输出的结果除了基本的信息和指标外,还包括了发送的数据的总字节数,以及接收和发送的传输速率。
Linux ab命令的注意事项
使用ab命令测试Web服务器的性能时,需要注意以下几点:
- ab命令只能测试静态的URL,不能测试动态的URL,比如包含了查询字符串或会话ID的URL,因为这些URL的响应可能会随着请求的变化而变化,导致测试结果不准确。
- ab命令只能测试单个的URL,不能测试一个完整的Web应用,比如包含了多个页面和链接的Web应用,因为这些Web应用的性能可能会受到多个因素的影响,比如数据库、缓存、会话管理等。
- ab命令只能测试Web服务器的性能,不能测试客户端的性能,比如浏览器的渲染速度、JavaScript的执行速度等,因为这些性能可能会受到客户端的硬件、软件、网络等条件的影响。
- ab命令只能测试Web服务器的吞吐率和响应时间,不能测试Web服务器的功能和正确性,比如返回的内容是否符合预期、是否有错误或异常等,因为这些功能和正确性可能需要人工或自动化的测试工具来验证。
- ab命令可能会对测试的Web服务器造成很大的压力,甚至导致服务器崩溃或无法正常服务,因此,建议在测试之前做好备份和恢复的准备,以及在测试期间监控服务器的资源使用情况,避免对服务器造成不可逆的损害。
如果你在使用ab命令时,遇到了bash: ab: command not found
的错误,说明你没有安装ab命令,你可以根据你的Linux发行版,使用相应的安装命令,如上文所述,或者参考Apache官网的安装指南。
评论区