侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux ab命令教程:如何测试Web服务器的性能(附实例详解和注意事项)

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-urlencodedtext/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官网的安装指南。

0

评论区