服务器性能测试工具原理
对于目前流行的性能测试工具,他们的基本工作原理都是一致的。在客户端通过多线程或多进程模拟虚拟用户访问,对服务器端施加压力,然后在过程中监控和收集性能数据。
组成部分:
部件 | 描述 |
用户行为生成器 | 脚本编写或脚本录制 |
压力产生器 | 模拟虚拟用户向服务器发请求 分布式代理--模拟更多的虚拟用户向服务器发请求 |
用户代理 | 用户代理是运行在负载机上的进程,该进程与产生负载压力的进程或线程协作,接收调度系统的命令 ,调度产生负载压力的进程或线程,从这个意义上看,用户代理也是压力产生器的一部分。 |
调度 | 根据不同的虚拟用户数,不同事务的用户比例,运行时间等设置产生压力调度 |
监控 | 压力测试过程中对各种软硬件进行监控,如对数据库、应用服务器,服务器的主要性能表现情况进行监控 |
结果分析工具 | 将监控系统获取的性能技术数器值生成曲线图,折线图等各种图表 |
性能测试工具应该具备什么的特质呢?
1、工具本身占用系统资源少,可扩展性好,可用性强。
2、能模拟真实业务事务操作,在并发时能真正产生业务压力。(这一点是核心)
3、对压力测试结果能很好地进行性能分析,快速找出被测试系统的瓶颈。
4、测试脚本的重复性强。
· Siege是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。
安装:
$:wget http://www.joedog.org/pub/siege/siege-2.72.tar.gz
$:tar zxvf siege-2.72.tar.gz
$:cd siege-2.72
$:sudo ./configure
$: sudo make; sudo make install
安装成功验证:siege –help,如果安装没问题会出现以下类似信息:
SIEGE 2.70
Usage: siege [options]
siege [options] URL
siege -g URL
Options:
-V, –version VERSION, prints the version number.
-h, –help HELP, prints this section.
-C, –config CONFIGURATION, show the current config.
-v, –verbose VERBOSE, prints notification to screen.
-g, –get GET, pull down HTTP headers and display the
transaction. Great for application debugging.
-c, –concurrent=NUM CONCURRENT users, default is 10
-i, –internet INTERNET user simulation, hits URLs randomly.
-b, –benchmark BENCHMARK: no delays between requests.
-t, –time=NUMm TIMED testing where “m” is modifier S, M, or H
ex: –time=1H, one hour test.
-r, –reps=NUM REPS, number of times to run the test.
-f, –file=FILE FILE, select a specific URLS FILE.
-R, –rc=FILE RC, specify an siegerc file
-l, –log[=FILE] LOG to FILE. If FILE is not specified, the
default is used: PREFIX/var/siege.log
-m, –mark=”text” MARK, mark the log file with a string.
-d, –delay=NUM Time DELAY, random delay before each requst
between 1 and NUM. (NOT COUNTED IN STATS)
-H, –header=”text” Add a header to request (can be many)
-A, –user-agent=”text” Sets User-Agent in request
Copyright (C) 2010 by Jeffrey Fulmer, et al.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.
使用简介:
命令: siege -c 50 -t60 -u http://www.baidu.com
起五十个并发,测60个分钟,连续访问baidu首页。
对多个url并发:
(1)新建一个文件urls.txt,里面的内容为(只是例子,任何url都可以)
(2)siege -c 200 -t 5 -f urls.txt
注:每行都是一个url,它会从里面随机访问的
结果说明:
** SIEGE 2.72
** Preparing 300 concurrent users for battle.
The server is now under siege.. done.
Transactions: 30000 hits //完成30000次处理
Availability: 100.00 % //100.00 % 成功率
Elapsed time: 68.59 secs //总共使用时间
Data transferred: 817.76 MB //共数据传输 817.76 MB
Response time: 0.04 secs //响应时间,显示网络连接的速度
Transaction rate: 437.38 trans/sec //平均每秒完成 437.38 次处理
Throughput: 11.92 MB/sec //平均每秒传送数据
Concurrency: 17.53 //实际最高并发连接数
Successful transactions: 30000 //成功处理次数
Failed transactions: 0 //失败处理次数
Longest transaction: 3.12 //每次传输所花最长时间
Shortest transaction: 0.00 //每次传输所花最短时间
http://www.ha97.com/4663.html
Transactions |
总共测试次数 |
Availability |
成功次数百分比 |
Elapsed time |
总共耗时多少秒 |
Data transferred |
总共数据传输 |
Response time |
等待响应耗时 |
Transaction rate |
平均每秒处理请求数 |
Throughput |
吞吐率 |
Concurrency |
最高并发 |
Successful transactions |
成功的请求数 |
Failed transactions |
失败的请求数 |
并发量:20 访问量:200
例如,Xxx接口测试:
测试结果:
Transactions |
3967 hits |
Availability |
99.17 % |
Elapsed time |
66.21 secs |
Data transferred |
1.00 MB |
Response time |
0.09 secs |
Transaction rate |
59.92 trans/sec |
Throughput |
0.02 MB/sec |
Concurrency |
5.32 |
Successful transactions |
3967 |
Failed transactions |
33 |
Longest transactions |
15.05 |
Shortest transactions |
0.00 |
siege进行压力测试 模拟10000用户,设置10秒,出现这个错误是什么意思?为什么会提示打开的文件太多?
[error] descriptor table full sock.c:108: Too many open files
原因:fd是有上限的,ulimit -n看看
注:查看打开文件数:
方法一: 查询当前终端的文件句柄数: ulimit -n 回车,一般的系统默认的1024
方法二: ulimit -a
解决:(1)修改文件句柄数为65535,ulimit -n 65535.此时系统的文件句柄数为65535;
(2)将ulimit 值添加到/etc/profile文件中(适用于有root权限登录的系统)
为了每次系统重新启动时,都可以获取更大的ulimit值,将ulimit 加入到/etc/profile 文件底部。
echo ulimit -n 65535 >>/etc/profile
source /etc/profile #加载修改后的profile
ulimit -n #显示65535,修改完毕!
wget http://blog.zyan.cc/soft/linux/webbench/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install
( 检测安装成功cd webbench-1.5 获得:webbench)
webbench -c 500 -t 30 http://127.0.0.1/test.jpg
参数说明:-c表示并发数,-t表示时间(秒)
webbench -c 100 http://localhost:12345/test
常用参数说明,-c 表示客户端数,-t 表示时间
Cd ~/software/webbench-1.5
webbench --help
webbench [option]... URL
-f|--force Don't wait for reply from server.
-r|--reload Send reload request - Pragma: no-cache.
-t|--time
-p|--proxy
-c|--clients
-9|--http09 Use HTTP/0.9 style requests.
-1|--http10 Use HTTP/1.0 protocol.
-2|--http11 Use HTTP/1.1 protocol.
--get Use GET request method.
--head Use HEAD request method.
--options Use OPTIONS request method.
--trace Use TRACE request method.
-?|-h|--help This information.
-V|--version Display program version.
机器A 运行一个服务,机器B 上运行 webbench, 第二天发现 机器A 一切正常,机器B 奇慢无比,ps一看,偶地神呐,webbench 是开进程去跑啊……这个太……
webbench -C 10000 -t 60 http://192.168.116.7/挂了,把自己给搞挂了
貌似webbench不支持cookie,而且输出的测试结果太简单,功能过于简单了点,apache的ab功能比较多,可惜每次只能测试一个url,siege又只适合静态页面,如果能有一个把siege和ab的优点综合起来的东东完美了,继续寻找
#cd /usr/local/
#wget http://icn.me/http_load_tar_gz
#sudo tar zxvf http_load-12mar2006.tar.gz
#进入到http_load 目录:#cd http_load-12mar2006
#sudo make
#sudo make install
也有widows版本
练习1:多个url并发
Step1: vim urls.txt
输入http://flight.qunar.com/
Step2:http_load -parallel 5 -fetches 100 urls.txt
命令行说明: 使用5个进程, 随机访问urls.txt的URL 100次
上面的测试中运行了100个请求,最大的并发进程数是5,总计传输的数据是1.25946e+07 bytes,运行的时间是0.521175秒
每一个连接平均传输的数据量125946;
每秒的响应请求为191.874,每秒传递的数据2.41658e+07;
每连接的平均响应时间,最大的响应时间,最小的响应时间;
100个请求全部返回200OK
练习2:sudo http_load -parallel 1 -fetches 100 -rate 100 urls.txt
rate参数表示每秒访问的频率
以多线程的方式模拟用户,将图形化界面上的参数等转换成java语言实现模拟指定的用户行为,向服务器发送各种请求,并将服务器返回的结果进行分析再以适当的形式显示。常用的设置保存在bin/XX.properties下,测试用例参数化,保存为XX.jmx文件,JMeter会自动读取这些配置、用例文件。
运行命令在%JMETER_HOME%/bin 下,对于 Windows 用户来说,命令是 jmeter.bat
JMeter 的主要测试组件总结如下:
1. 测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
2. 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。
3. 监听器负责收集测试结果,同时也被告知了结果显示的方式。
4. 逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
5. 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
6. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
7. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。
8. 定时器负责定义请求之间的延迟间隔。