Heim Backend-Entwicklung PHP-Tutorial 基准测试工具:ab

基准测试工具:ab

Jul 23, 2016 am 08:54 AM

基准测试工具(ab)

ab是什么?
ab是基于命令行的工具,均可运行在windows、linux平台下。
为什么选用这个工具?
易于使用,输入少量命令选项,即可得出结果,同时易于安装。

安装ab

win:如果本地有apache的开发环境,那么ab默认在apache目录下的bin目录下,打开bin目录可以看到
linux:直接yum install httpd-tools,安装即可

简单上手

直接敲入下面代码(注意切换ab所在的目录)
-c 10代表并发数是10
-n 10总共进行100次访问
后面接要访问的网址,切记不可缺少http://

  1. D:\phpStudy\Apache\bin>ab -c 10 -n 1000 http://example.com/phpinfo.php
复制代码

待ab自己跑一下,得出下面结果

  1. #ab工具的描述,注意其中的版本号
  2. This is ApacheBench, Version 2.3
  3. Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
  4. Licensed to The Apache Software Foundation, http://www.apache.org/
  5. #测试结果,共测试1000次,每100次显示访问进度,访问的网站是example.com
  6. Benchmarking example.com (be patient)
  7. Completed 100 requests
  8. Completed 200 requests
  9. Completed 300 requests
  10. Completed 400 requests
  11. Completed 500 requests
  12. Completed 600 requests
  13. Completed 700 requests
  14. Completed 800 requests
  15. Completed 900 requests
  16. Completed 1000 requests
  17. Finished 1000 requests
  18. #服务器的信息
  19. Server Software: nginx/1.6.2 #服务器web软件
  20. Server Hostname: example.com #主机地址
  21. Server Port: 80 #访问端口
  22. #文档信息
  23. Document Path: /phpinfo.php #访问的文档
  24. Document Length: 94804 bytes #返回结果大小字节数(包含html,js,css,图片及响应中的所有内容字节数总和)
  25. #链接信息
  26. Concurrency Level: 10 #并发数,-c 10 设置了10个并发
  27. Time taken for tests: 7.498 seconds #总耗时,单位秒
  28. Complete requests: 1000 #总共请求中已完成的请求总数的和
  29. Failed requests: 219 #失败的请求数总和
  30. (Connect: 0, Receive: 0, Length: 219, Exceptions: 0)
  31. Non-2xx responses: 9 #未收到2xx系列成功的请求总数
  32. Total transferred: 94135779 bytes #整个请求总数中响应总数距的总大小字节数,包含头信息
  33. HTML transferred: 93952076 bytes #整个请求总数中正文内容的总大小字节
  34. Requests per second: 133.36 [#/sec] (mean) #每秒支持的并发数,这里是每秒支持133.36个并发
  35. Time per request: 74.984 [ms] (mean) #完成一个请求的总耗时
  36. Time per request: 7.498 [ms] (mean, across all concurrent requests) #完成所有并发请求中一个请求的总耗时
  37. Transfer rate: 12259.83 [Kbytes/sec] received #每秒收到的字节总数(KB)
  38. #测试的时间结果数据,留意Total一项,10个并发的情况下,完成一个请求,最小耗时(min)9毫秒,最大耗时(max)146毫秒
  39. Connection Times (ms)
  40. min mean[+/-sd] median max
  41. Connect: 0 0 0.7 0 20
  42. Processing: 9 74 22.2 68 146
  43. Waiting: 6 73 22.1 67 143
  44. Total: 9 74 22.2 68 146
  45. #完成请求百分比,例如第一项,50% 68,代表一半的请求在68毫秒内完成,95% 129,代表1000的请求里,百分之九十八的请求在129毫秒里完成
  46. Percentage of the requests served within a certain time (ms)
  47. 50% 68
  48. 66% 78
  49. 75% 86
  50. 80% 92
  51. 90% 109
  52. 95% 122
  53. 98% 129
  54. 99% 133
  55. 100% 146 (longest request)
复制代码
ab选项

输入下面命令得到ab帮助文档,该帮助文档,分别说明了用法和命令选项的含义

  1. D:\phpStudy\Apache\bin>ab -h
复制代码

ab帮助文档的输出

  1. Usage: ab [options] [http://]hostname[:port]/path
  2. Options are:
  3. -n requests Number of requests to perform
  4. -c concurrency Number of multiple requests to make at a time
  5. -t timelimit Seconds to max. to spend on benchmarking
  6. This implies -n 50000
  7. -s timeout Seconds to max. wait for each response
  8. Default is 30 seconds
  9. -b windowsize Size of TCP send/receive buffer, in bytes
  10. -B address Address to bind to when making outgoing connections
  11. -p postfile File containing data to POST. Remember also to set -T
  12. -u putfile File containing data to PUT. Remember also to set -T
  13. -T content-type Content-type header to use for POST/PUT data, eg.
  14. 'application/x-www-form-urlencoded'
  15. Default is 'text/plain'
  16. -v verbosity How much troubleshooting info to print
  17. -w Print out results in HTML tables
  18. -i Use HEAD instead of GET
  19. -x attributes String to insert as table attributes
  20. -y attributes String to insert as tr attributes
  21. -z attributes String to insert as td or th attributes
  22. -C attribute Add cookie, eg. 'Apache=1234'. (repeatable)
  23. -H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
  24. Inserted after all normal header lines. (repeatable)
  25. -A attribute Add Basic WWW Authentication, the attributes
  26. are a colon separated username and password.
  27. -P attribute Add Basic Proxy Authentication, the attributes
  28. are a colon separated username and password.
  29. -X proxy:port Proxyserver and port number to use
  30. -V Print version number and exit
  31. -k Use HTTP KeepAlive feature
  32. -d Do not show percentiles served table.
  33. -S Do not show confidence estimators and warnings.
  34. -q Do not show progress when doing more than 150 requests
  35. -l Accept variable document length (use this for dynamic pages)
  36. -g filename Output collected data to gnuplot format file.
  37. -e filename Output CSV file with percentages served
  38. -r Don't exit on socket receive errors.
  39. -m method Method name
  40. -h Display usage information (this message)
复制代码

英文看不懂,附上中文解释,网上抄的,我没试过

  1. -n 即requests,用于指定压力测试总共的执行次数。
  2. -c 即concurrency,用于指定压力测试的并发数。
  3. -t 即timelimit,等待响应的最大时间(单位:秒)。
  4. -b 即windowsize,TCP发送/接收的缓冲大小(单位:字节)。
  5. -p 即postfile,发送POST请求时需要上传的文件,此外还必须设置-T参数。
  6. -u 即putfile,发送PUT请求时需要上传的文件,此外还必须设置-T参数。
  7. -T 即content-type,用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。
  8. -v 即verbosity,指定打印帮助信息的冗余级别。
  9. -w 以HTML表格形式打印结果。
  10. -i 使用HEAD请求代替GET请求。
  11. -x 插入字符串作为table标签的属性。
  12. -y 插入字符串作为tr标签的属性。
  13. -z 插入字符串作为td标签的属性。
  14. -C 添加cookie信息,例如:"Apache=1234"(可以重复该参数选项以添加多个)。
  15. -H 添加任意的请求头,例如:"Accept-Encoding: gzip",请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。
  16. -A 添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。
  17. -P 添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。
  18. -X 指定使用的代理服务器和端口号,例如:"126.10.10.3:88"。
  19. -V 打印版本号并退出。
  20. -k 使用HTTP的KeepAlive特性。
  21. -k 使用HTTP的KeepAlive特性。
  22. -d 不显示百分比。
  23. -S 不显示预估和警告信息。
  24. -g 输出结果信息到gnuplot格式的文件中。
  25. -e 输出结果信息到CSV格式的文件中。
  26. -r 指定接收到错误信息时不退出程序。
  27. -h 显示用法信息,其实就是ab -help。
复制代码

一般用-n,-c,-t就好了
-n请求总数
-c并发数
-t指定秒数内的并发数

-t的用法说一下,下面的意思是在20秒内并发数10个访问

  1. D:\phpStudy\Apache\bin> ab -c 10 -t 20 http://example.com/phpinfo.php
  2. This is ApacheBench, Version 2.3
  3. Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
  4. Licensed to The Apache Software Foundation, http://www.apache.org/
  5. Benchmarking example.com (be patient)
  6. Finished 3011 requests
  7. Server Software: nginx/1.6.2
  8. Server Hostname: example.com
  9. Server Port: 80
  10. Document Path: /phpinfo.php
  11. Document Length: 94804 bytes
  12. Concurrency Level: 10
  13. Time taken for tests: 20.006 seconds
  14. Complete requests: 3011
  15. Failed requests: 495
  16. (Connect: 0, Receive: 0, Length: 495, Exceptions: 0)
  17. Non-2xx responses: 54
  18. Total transferred: 280896464 bytes
  19. HTML transferred: 280344222 bytes
  20. Requests per second: 150.50 [#/sec] (mean)
  21. Time per request: 66.444 [ms] (mean)
  22. Time per request: 6.644 [ms] (mean, across all concurrent requests)
  23. Transfer rate: 13711.44 [Kbytes/sec] received
  24. Connection Times (ms)
  25. min mean[+/-sd] median max
  26. Connect: 0 0 0.5 0 10
  27. Processing: 6 66 17.6 63 203
  28. Waiting: 5 64 17.3 61 202
  29. Total: 6 66 17.6 63 203
  30. Percentage of the requests served within a certain time (ms)
  31. 50% 63
  32. 66% 69
  33. 75% 72
  34. 80% 75
  35. 90% 82
  36. 95% 92
  37. 98% 113
  38. 99% 125
  39. 100% 203 (longest request)
复制代码

特别说明:如果访问http://www.example.com/,没有指定特定文件,记得要加最后的那个/,一定要加!!!否则可能会出现访问不到的情况!!!

可能会影响基准测试的情况

地理位置和网络问题

响应文件大小

代码的复杂度

浏览器解析

Web服务器的配置

地理位置和网络问题

如果Web服务器存放在境外,那么我们从本地访问境外的网站,可想而知,经过的路由器结点,服务器结点,再通过太平洋海底的光缆,而后再访问到Web服务器,Web服务器处理后,再继续海底光缆,各个服务器、路由结点的跳转返回,这样的话肯定会影响到测试结果(我的建议是,直接在服务器上进行ab测试)

响应文件大小

假如发送一个3MB的页面,服务器网卡会把3MB的数据拆分成单个很小的数据包,传输过程中,只有一个数据包损坏或丢失,则会重新发送所有的数据包,所以发送的包越小越好,同时,越小的数据传输,越快传输到用户的机器上。

代码的复杂度

代码的复杂度即是对业务逻辑复杂的处理,还有对文件调用、数据库访问、远端API接口的调用等等都会影响处理时间

浏览器解析

每个浏览器都有自己对js、css、html的处理方法,想想IE8以下和chrome的区别即可知道

Web服务器设置

一般Web服务器安装后,简单设置,即可实现Web服务(开箱即用),但是这样的设置没有发挥Web服务器的最大性能,需要资深的工程师对服务器进行相关配置,使之发挥最大性能,这里简单实用Keep-Alive说明。
Keep-Alive的作用就是,Web服务器打开特定数量的连接,让这些连接处于打开状态,使之能快速处理传入的请求,这样就不会为每一个传入的请求打开一个连接然后处理请求,减少服务器的处理请求的进程数,从而增加并发数。
在ab中使用-k进行测试,例如下面这句

  1. #-k,允许服务器保存5个并发连接处于打开并允许的状态,让其他请求快速处理,减少创建新请求的处理时间
  2. ab -c 5 -t 100 -k http://www.example.com/
复制代码
测试工具


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Mar 28, 2025 pm 05:11 PM

In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Mar 28, 2025 pm 05:12 PM

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Apr 06, 2025 am 12:02 AM

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

See all articles