生产系统上线前都会进行压力测试,能承受多少并发,在大并发下性能如何,都是上线前必须要了解的。
TDengine 作为时序数据库(Time Series Database),提供了 RESTFul 接口,可以使用 HTTP 协议进行操作。这个接口在生产环境中性能如何,是否能够满足高并发要求,都需要压测后才能知道。
在此介绍 2 款实用的压测工具 ab 和 JMeter,这两者都是 Apache 开发的。ab 只能提供汇总后的结果,JMeter 可以提供每个请求的相应时间。因此 JMeter 更加复杂,占用资源更多。
1.ab
ab 是 Apachebench 命令的缩写,ab 是 Apache 自带的压力测试工具。ab 可以对不同类型服务器进行压力测试。比如nginx、tomcat、IIS等。
ab 能够创建多个并发线程,占用的资源非常少。
官网:https://httpd.apache.org/docs/2.4/programs/ab.html
1.1.安装
ab 是 httpd 工具包里面的一个小工具,需要先安装 http 工具包。
#CentOS
yum install httpd-tools
#Ubuntu
apt install
1.2.测试
1.2.1.参数解读
-n requests
#执行的请求个数。
-c concurrency
#一次产生的请求个数。
-H custom-header
#对请求附加额外的头信息。
-p POST-file
#需要POST的数据的文件.
-k
#启用HTTP KeepAlive功能,在一个HTTP会话中执行多个请求。
1.2.2.测试命令
并发10个线程,共发送10000个请求,采用Keepalive方式。
#query.sql
select last_row(*) from db01.meters ;
ab -n 10000 -c 10 -k -H "Authorization: Basic cm9vdDp0YW9zZGF0YQ=="
1.2.3.测试结果:
Concurrency Level: 10
Time taken for tests: 46.756 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 3030000 bytes
Total body sent: 2140000
HTML transferred: 2000000 bytes
Requests per second: 213.88 [#/sec] (mean)
Time per request: 46.756 [ms] (mean)
Time per request: 4.676 [ms] (mean, across all concurrent requests)
Transfer rate: 63.29 [Kbytes/sec] received
44.70 kb/s sent
107.98 kb/s total
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 14.2 0 1002
Processing: 10 46 12.8 45 198
Waiting: 9 41 11.9 40 175
Total: 10 47 19.0 45 1048
Percentage of the requests served within a certain time (ms)
50% 45
66% 50
75% 53
80% 55
90% 61
95% 67
98% 77
99% 88
100% 1048 (longest request)
2.JMeter
Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。
JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。
官网:https://jmeter.apache.org/usermanual/index.html
2.1.安装
JMete 是基于 Java 开发的,使用前需求先安装 Java。
下载地址:https://jmeter.apache.org/download_jmeter.cgi
解压缩所安装包,执行运行可执行文件即可
tar xvzf apache-jmeter-5.4.3.tar.gz
cd apache-jmeter-5.4.3
sh
2.2.测试
2.2.1.创建测试任务
按照以下顺序创建一个测试任务
├── 1 测试计划
├── 2 线程组
│ └── 7 HTTP请求
├── 3 HTTP信息头管理
├── 4 汇总报告
├── 5 聚合报告
└── 6
2.2.2.参数设置
线程组
线程数:10
Ramp-Up时间(秒):1
循环测试:1000
HTTP信息头管理器
名称:Authorization
值:Basic cm9vdDp0YW9zZGF0YQ==
HTTP请求
服务器或IP:192.168.0.11
端口:6041
HTTP请求:POST
路径:/rest/sql
消息体数据:select last_row(*) from db01.meters;
2.2.3.测试结果
点击工具栏运行按钮即可开始测试
测试结果可在汇总报告和聚合报告中查看。
2.3 注意
执行 jemeter.sh 后就会提示
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
真实的生产环境不要使用 GUI 进行测试,GUI 只是用来调试测试文件的。
如果要进行压力测试,需要使用命令行模式(CLI Mode)。
3.ab 与 JMeter 对比
引用 jmeter和ab的对比 的结论
- JMeter是一次完整的请求和返回;ab 只是发出去请求,并不对返回做处理。
- JMeter可以提供更加详细的统计结果数据;ab 的结果为用数学方式统计平均值。
- JMeter支持可变参数和 CSV 数据集的输入,能设定更加负责的测试样例;ab 不需要写配置文件。
- JMeter不支持精确时间的压测;ab 支持。
- JMeter GUI 比较重,并且统计了很多结果数据,比 ab 耗时耗费资源多;ab 属于轻量级。