压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。
Apache Ab
Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工具 ,简单易用。 使用起来非常的简单和方便。 不仅仅是可以apache服务器进行网站访问压力测试,还可以对其他类型的服务器进行压力测试。 比如nginx,tomcat,IIS等
官网:http://httpd.apache.org/docs/2.2/programs/ab.html
参数说明
Usage: ab [options] [http[s]://]hostname[:port]/path
用法:ab [选项] 地址
选项:
Options are:
-n requests #执行的请求数,即一共发起多少请求。
-c concurrency #请求并发数。
-t timelimit #测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-s timeout #指定每个请求的超时时间,默认是30秒。
-b windowsize #指定tcp窗口的大小,单位是字节。
-B address #指定在发起连接时绑定的ip地址是什么。
-p postfile #指定要POST的文件,同时要设置-T参数。
-u putfile #指定要PUT的文件,同时要设置-T参数。
-T content-type #指定使用POST或PUT上传文本时的文本类型,默认是'text/plain'。
-v verbosity #设置详细模式等级。
-w #将结果输出到html的表中。
-i #使用HEAD方式代替GET发起请求。
-y attributes #以表格方式输出时,设置html表格tr属性。
-z attributes #以表格方式输出时,设置html表格th或td属性。
-C attribute #添加cookie,比如'Apache=1234'。(可重复)
-H attribute #为请求追加一个额外的头部,比如'Accept-Encoding: gzip'。(可重复)
-A attribute #对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
-P attribute #对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
-X proxy:port #指定代理服务器的IP和端口。
-V #打印版本信息。
-k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
-d #不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
-q #如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。
-g filename #把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
-e filename #产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
-r #当收到错误时不要退出。
-h #输出帮助信息
-Z ciphersuite 指定SSL/TLS密码套件
-f protocol 指定SSL/TLS协议(SSL3, TLS1, TLS1.1, TLS1.2 or ALL)
压测测试
ab -c 10 -n 1000 -k "http://www.baidu.com/"
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.baidu.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
Server Software: BWS/1.1 //* 请求的服务器名称、版本号
Server Hostname: www.baidu.com //* 请求的地址
Server Port: 80 //* 请求的端口号
Document Path: / //* 请求的绝对路径,即具体接口名称
Document Length: 199875 bytes //* 响应数据的大小
Concurrency Level: 10 //* 并发用户数
Time taken for tests: 14.567 seconds //* 测试总耗时 ,单位:s
Complete requests: 1000 //* 总请求数
Failed requests: 988 //* 失败总请求数
(Connect: 0, Receive: 0, Length: 988, Exceptions: 0)
Write errors: 0 //* 发送请求失败的次数
Total transferred: 198476425 bytes //* 从服务端收到的总字节数
HTML transferred: 197338475 bytes //* 从服务端收到的总文档字节数,即不包含Total transferred中的HTTP头信息
Requests per second: 68.65 [#/sec] (mean) //* 平均每秒请求数,即吞吐量
Time per request: 145.672 [ms] (mean) //* 平均每次请求并发用户总耗时,即 该值=平均每次请求耗时 * 并发数 ,单位:ms
Time per request: 14.567 [ms] (mean, across all concurrent requests) //* 平均每次请求耗时 ,单位:ms
Transfer rate: 13305.53 [Kbytes/sec] received //* 服务端每秒响应的数据大小,单位: kb/s
Connection Times (ms) //* 网络耗时 (依次是:最小、平均、标准偏差、中位数、最大) ,单位:ms
min mean[+/-sd] median max
Connect: 6 16 89.3 8 1011
Processing: 22 127 160.5 73 1919
Waiting: 8 23 53.5 10 499
Total: 28 143 182.4 82 1927
Percentage of the requests served within a certain time (ms) //* 请求耗时分布情况百分比 ,单位:ms
50% 82
66% 105
75% 134
80% 284
90% 321 //* 表示 90%的请求在 321ms 内得到服务端响应结果
95% 367
98% 746
99% 1038
100% 1927 (longest request)
Jmeter
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。
Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
Windows 安装
- Jmeter官网(本文采用apache-jmeter-5.4.1.zip):https://jmeter.apache.org/download_jmeter.cgi
- Java SDK Download:https://www.oracle.com/java/technologies/javase-downloads.html
- JMeter插件下载地址: http://jmeter-plugins.org/downloads/all/
Mac 安装
JavaJDK 安装
JDK安装此处略去,不作为文本的介绍的重点,读者可自行Google。
Jmeter安装
进入JMeter的下载地址页面,如下图,有两个版本可供下载
- Binaries:二进制版,即已经编译好、可直接执行;
- Source:源代码版,需要自己编译;
将此软件下载后,进行解压
启动jmeter
进入 jmeter 的 bin 目录,执行 sh jmeter 命令,即可启动 jmeter 软件
改为中文