标签:
作为程序员,写好一个模块后,不知道这个模块在高并发的情况下能不能平稳过渡,这里所说的平稳过渡是指,在高并发的情况下还能正常访问并处理相关数据库服务请求并返回数据。APACHE自带的测试工具AB(apache benchmark),能帮我来测试我的模块能否胜任高并发(不要也要看数据库服务器和应用服务器的性能)。
AB在APACHE的bin目录下,以命令行的方式执行:
格式: ./ab [options] [http://]hostname[:port]/path
参数说明:
-n requests //在测试会话中所执行的请求个数。默认时,仅执行一个请求
-c concurrency //一次产生的请求个数。默认是一次一个
t timelimit //测试所进行的最大秒数
其他的参数看中就用。
参数很多,一般我们用 -c 和 -n 参数就可以了. 例如:
./ab -c 1000 -n 1000 http://127.0.0.1/index.jsp
这个表示同时处理1000个请求并运行1000次index.jsp文件.
其返回的结果集是有很多内容,我们选择关键的几个看看就大概知道我们的模块性能了
我比较关心的几个结果:
Concurrency Level: 1000
Time taken for tests: 1.190 seconds //处理1000个并发请求总共花了1.19秒
Complete requests: 1000 //完成处理的请求量
Failed requests: 0 //请求失败数
Write errors: 0
Non-2xx responses: 1000
Total transferred: 164000 bytes //总共传输了多少流量
HTML transferred: 0 bytes
Requests per second: 840.58 [#/sec] (mean) //平均一个请求花840.58毫秒 大家最关心的指标之一,相当于 LR 中的每秒事务数,后面括号中的 mean 表示这是一个平均值
Time per request: 1189.651 [ms] (mean) //大家最关心的指标之二,相当于 LR 中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值
Time per request: 1.190 [ms] (mean, across all concurrent requests) //每个请求实际运行时间的平均值 ms是毫秒
Transfer rate: 134.62 [Kbytes/sec] received //传输速率 可以帮助排除是否存在网络流量过大导致响应时间延长的问题
====================================
Gatling作为一款开源免费的性能测试工具越来越受到广大程序员的欢迎。免费当然是好的,最缺钱的就是程序员了;开源更好啊,缺啥功能、想做定制化的可以自己动手,丰衣足食。其实我最喜欢的原因是其提供了简洁强大的API,原生支持命令行运行,不像JMeter那样需要在界面上点来点去。另外其出色的扩展API和轻量级的HTML报表都值得让人称道。
Gatling的的官方网站是http://gatling-tool.org/。目前Gatling有两个主线版本,一个是Gatling 1,最新版本是1.5.3;一个是Gatling 2,最新版本是2.0.0-M3a。Gatling 2使用了JDK7进行编译,使用的Scala版本是2.10,它对Gatling的API进行了一些重构和重新设计,内部也有一些调整。 目前Gatling 2还在开发阶段,所以如果要在项目中使用的话最好还是使用Gatling 1.5.3。
其实Gatling是款绿色软件,可以直接从https://github.com/excilys/gatling/wiki/Downloads下载指定的版本。下载下来解压缩以后,我们可以看到其目录结构。
twer@bowen-huang:~/sourcecode/GatlingWorkShop/gatling-charts-highcharts-1.5.2$ tree -L 2
.
├── bin //可执行文件目录
│ ├── gatling.bat
│ ├── gatling.sh
│ ├── recorder.bat
│ └── recorder.sh
├── conf //配置目录
│ ├── application.conf
│ ├── gatling.conf
│ └── logback.xml
├── lib //依赖的程序库
│ ├── akka-actor-2.0.4.jar
│ ├── async-http-client-1.7.18.20130621.jar
│ ├── commons-io-2.4.jar
│ ├── commons-lang-2.6.jar
│ ├── commons-math3-3.1.1.jar
│ ├── commons-pool-1.6.jar
│ ├── compiler-interface-0.12.3-sources.jar
│ ├── config-1.0.1.jar
│ ├── gatling-app-1.5.2.jar
│ ├── gatling-charts-1.5.2.jar
│ ├── gatling-charts-highcharts-1.5.2.jar
│ ├── gatling-core-1.5.2.jar
│ ├── gatling-http-1.5.2.jar
│ ├── gatling-jdbc-1.5.2.jar
│ ├── gatling-metrics-1.5.2.jar
│