相关概念
吞吐率(Requests per second)
- 概念:服务并发处理能力的量化描述,单位是 reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
- 计算公式:总请求数 / 处理完成这些请求数所花费的时间,即:
Request per second = Complete requests / Time taken for tests
并发连接数(The number of concurrent connections)
- 概念:某个时刻服务器所接受的请求数目,简单的将,就是一个会话。
并发用户数(The number of concurrent users,Concurrency Level)
- 概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。
用户平均请求等待时间(Time per request)
- 计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即:
Time per request = Time taken for tests /( Complete requests / Concurrency Level)
服务器平均请求等待时间(Time per request: across all concurrent requests)
- 计算公式:处理完成所有请求数所花费的时间 / 总请求数,即:
Time taken for / testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也=用户平均请求等待时间/并发用户数,即Time per request / Concurrency Level
Apache Bench
ab是Apache的超文本传输协议(HTTP)的性能测试工具,可以测试apache、IIs、tomcat、nginx 等服务器。但是 ab 没有 Jmeter、Loadrunner 那样有各种场景设计、各种图形报告和监控,只需一个命令即可,有输出描述,可以简单的进行一些压力测试。
查看Apache版本
Mac系统下自带 Apache,可以使用apachectl -v
命令查看 Apache 版本:
1 | $ apachectl -v |
查看ab版本
1 | $ ab -V |
查看当前系统的默认文件打开数
在压测开始前,你需要确保你的open files
足够大,否则会报TOO MANY FILES OPEN
错误,可以通过ulimit -a
查看
1 | $ ulimit -a |
设置打开文件数限制为 2560:
1 | ulimit -n 2560 |
这只是临时修改,关闭终端会话后会复原。
命令
命令参数 | 说明 |
---|---|
-n | 请求次数 |
-c | 并发数 |
-r | 当接收到错误时,不要退出套接字(socket) |
关于登陆的问题
有时候进行压力测试需要用户登录,怎么办?
请参考以下步骤:
先用账户和密码登录后,用开发者工具找到标识这个会话的 Cookie 值(Session ID)记下来
如果只用到一个 Cookie,那么只需键入命令:
ab -n 100 -C key=value http://test.com/
如果需要多个 Cookie,就直接设 Header:
ab -n 100 -H “Cookie: Key1=Value1; Key2=Value2” http://test.com/
webbench
webbench是一枚强大得可以的压力测试工具,它最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便。
安装
1 | brew install ctags # 依赖安装 |
命令
1 | # 10 秒内向 http://127.0.0.1:3001/admin 发送 500 次请求 |
siege
siege是我解决ab该死的apr_socket_recv: Connection reset by peer (54)
错误时发现的一个好工具,不得不说这工具真心好,用法和webbench一样,但是信息全面很多。
安装
1 | brew install siege |
命令
压测参数 | 说明 |
---|---|
-C | 在屏幕上打印显示出当前的配置,配置是包括在他的配置文件$HOME/.siegerc中,可以编辑里面的参数,这样每次siege 都会按照它运行 |
-v | 运行时能看到详细的运行信息 |
-c | 模拟有n个用户在同时访问,n不要设得太大,因为越大,siege消耗本地机器的资源越多 |
-r | 重复运行测试n次,不能与-t同时存在 |
-t | 持续运行siege ‘n’秒(如10S),分钟(10M),小时(10H) |
-d | 每个url之间的延迟,在0-n之间 |
-b | 请求无需等待 delay=0 |
-i | 随机访问urls.txt中的url列表项 |
-f | 指定用特定的urls文件运行 ,默认为urls.txt ,位于siege安装目录下的etc/urls.txt |
-R | 指定用特定的siege 配置文件来运行,默认的为$HOME/.siegerc |
-l | 运行结束,将统计数据保存到日志文件中siege.log ,一般位于/usr/local/var/siege.log 中,也可在.siegerc中自定义 |
压测结果
1 | //并发10个,发生5次,共50个请求 |
常用命令
1 | # 200个并发对http://www.google.com发送请求100次 |
注意事项
- 发送post请求时,url格式为
http://www.xxxx.com/ POST p1=v1&p2=v2
- 如果url中含有空格和中文,要先进行url编码,否则siege发送的请求url不准确。