文章https://cloud.tencent.com/developer/article/1753788 已经简述了Jmeter Suite的操作过程,为了更为详细地介绍操作过程,尽可能做到看文章就会用工具,特此写了一篇详细说明。
压测机器购买
Jmeter Suite是一套分布式的压测服务,需要有1台或者多台机器组成的K8S集群进行部署。所以在部署压测服务之前,请先自行购买机器。
1、购买机器步骤(以腾讯云为例)
2、机器配置建议
根据Jmeter性能的研究,得出如下的机器配置建议。在上一步购买机器的时候,可以根据你的预期QPS值,购买相应的机器即可。
Server节点配置建议 | QPS | 节点数 | CPU(核) | 内存(GB) | 网络入带宽(Mbps) | 网络出带宽(Mbps) | IO写(KB/s)Max/min |
---|---|---|---|---|---|---|---|
机器资源 | 1800 | 等于机器数量 | 1 | 每增加一节点增加2GB | 大于25~60,视乎请求体和请求返回体大小决定。应时刻关注带宽是否够用,不够的时候扩容(或者按3Kbps每QPS) | 一般不需要特别配置(CBS默认已有150MB/s的写入速度) |
Master节点配置建议 | QPS | 节点数 | CPU(核) | 内存(GB) | 网络入带宽(Mbps) | 网络出带宽(Mbps) | IO写(KB/s)Max/min |
---|---|---|---|---|---|---|---|
机器资源 | / | 1 | server总CPU核数的1/3 | 每增加一节点增加1GB | 无要求,设置最低即可 | 一般不需要特别配置(CBS默认已有150MB/s的写入速度) |
比如,如果我们需要压测一个目标QPS为5000的业务,按照上面的推荐配置,我们需要如下配置的机器:
Server节点按照每核能够支撑1800QPS来算,目标5000 QPS,则需要3个核的CPU资源,而因为3核心还是比较少的,所以节点数只需要1。按照节点数为1来算,内存需要2GB。Master按照1核1GB内存算即可。
CPU(核) | 内存(GB) | 网络入带宽(Mbps) | 网络出带宽(Mbps) | IO写(KB/s)Max/min | |
---|---|---|---|---|---|
server | 3 | 2 | 15(达到瓶颈后扩容) | 默认 | |
master | 1 | 1 | 0 | 默认 | |
总资源要求 | 4 | 3 | 15 | 默认 |
如果觉得上面的推算都太复杂,那么只需要对CPU进行估算即可,即“目标QPS/1800”确定CPU核数,留下50%的冗余,选择相应机型即可。
压测工具安装
压测工具安装可以参考文章:https://cloud.tencent.com/developer/article/1753788
部署方式1:Helm3部署
安装Helm3(不能用Helm2)
代码语言:javascript复制wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
tar -zxvf helm-v3.2.1-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/
Checkout代码
代码语言:javascript复制git clone https://github.com/tkestack/charts.git
部署压测集群
代码语言:javascript复制helm install test-name incubator/jmeter-suite
部署方式2:TKE市场部署
如果觉得使用Helm部署还是太麻烦的话,你也可以直接在TKE市场直接点部署
发起测试
Checkout代码,打开jmeter-suite目录
代码语言:javascript复制git clone https://github.com/tkestack/charts.git
cd jmeter-suite
启动一次测试
代码语言:javascript复制sh start_test.sh demo/Test.jmx
脚本编写
参考文章:https://docs.qq.com/doc/DTFlMZmZsYk1PVlB1
1、加入后置监听器写入结果
Jmeter脚本的编写,可以参考这里https://github.com/tkestack/charts/jmeter-suite/demo/Test.jmx 这里的Jmeter脚本即可。但是有一点值得注意的是,为了便于分析结果,需要把数据写入influx,所以需要在Jmeter脚本里面添加后置监听器
2、断言如何写
为了对结果进行判断,我们一般会加入断言。但是断言如何写,很大程度上会影响施压机的性能,所以可以根据自己的需要写断言。
(1)断言写法1:对body进行判断
对body进行判断,可以对结果进行比较复杂的处理,但是缺点是性能消耗较大
(2)断言写法2:对返回代码进行判断
对返回代码进行判断,可以节省大量的性能,但缺点是不能输出更多的东西
查看结果
如果想查看测试结果,先找到你的机器IP地址
代码语言:javascript复制kubectl get node -o wide | grep $(kubectl get pod -o wide | grep grafana | awk '{print $7}') | awk '{print $7}'
然后访问下面地址即可(注意开放入站安全组)
代码语言:javascript复制http://机器IP:31221
结果分析
参考文章:https://docs.qq.com/doc/DTE9LZUtxa0xaSktH