kubectl exec -it jmeter-influxdb-0 -- rm -rf /var/lib/influxdb/data
kubectl delete pod jmeter-influxdb-0
PS:如果你使用的不是我们的Jmeter-Suite工具,pod的名字会稍有不同,把“jmeter-influxdb-0”改成你的influxDB的pod的名字即可。
具体表现如下:
如下:后端监听器的summaryOnly要改成false
解决方式:把HTTP请求中名称中的斜杠去掉
1.首先在“容器服务”里面找到压测集群
2.进入到“工作负载”界面,点击Deployment,选择***-distributed-jmeter-server
3.从pod列表里面任选一个,点击“远程登录”即可
https://blog.csdn.net/u014150715/article/details/103235531
解决方法:summaryOnly要为false,testTitle要有内容
压测过程中,经常需要用IP+host的方式来访问,比如要压测中间链路的某个云组件。在分布式集群上修改host文件比较麻烦,更好的方式是在jmeter脚本里面修改,简单快捷。
PS:线程数要超过用户数量才会被轮询到
PS: 脚本中CSV 数据文件设置的文件名,需要设置成压测执行机上的固定目录/jmeter 下的文件,即测试依赖的文件路径为:/jmter/文件名,例如:/jmter/token.csv
还需要把该csv文件上传到压测集群上,需要再coding平台上操作。需要确保配置的集群是你的目标压测集群。
后台服务都是由多台机器提供支撑。如果要压这种服务,一般而言需要配置负载均衡来压测,还有一种方式是在jmeter脚本里面配置访问不同的IP,配置方式如下:
${__V(iplist_${__Random(1,12)})}
日志对于压测排障来说,非常重要。下面讲在jmeter脚本加上详细的日志信息,在压测集群上查看日志信息的流程。
String response = new String(ResponseData);
log.info("===========================================================");
log.info(response);
if(!ResponseCode.equals("200")){
Failure = true;
FailureMessage="用户详细信息接口 失败,返回码:" + ResponseCode + "\n";
return;
}
String response = new String(ResponseData);
Failure = !(response.contains("\"errcode\":0"));
if (Failure) {
Failure = true;
FailureMessage="用户详细信息接口,未发现 \"errcode\":0" + response + "\n";
}
https://kubernetes.io/zh/docs/tasks/tools/install-kubectl/
以window为例:https://storage.googleapis.com/kubernetes-release/release/v1.20.0/bin/windows/amd64/kubectl.exe
kubectl version --client
测试。C:\Users\ty\.kube\
,创建config文件,把集群的配置信息复制到config文件中。ty为window登录的用户,.kube文件夹如果没有,需要创建。kubectl get pod
查看集群是否能访问,需要在腾讯云上加白名单。(找压测团队加白名单,或者配置为0.0.0.0/0)kubectl exec ***server**** -it /bin/bash
tail -f jmeter-server.log
命令,查看实时日志比如想拿到耗时长的请求的信息,可以使用prev打印更多信息。
参考:jmeter 获取全部响应_Jmeter 记录请求和响应信息
压测过程中需要每次请求的字段值不一样,在既定范围内,可以考虑采用随机数的方式来实现。
130${__Random(11111111,99999999)}
其原因是压测量太大,每个压测机的端口不够用。
具体的错误信息和grafan截图如下:
报错内容如下:
其原因是window默认给的端口是在5000以内,而事实上最大是65535,需要修改注册表,解决方案参考:https://blog.csdn.net/pittpakk/article/details/93474825
使用场景:要求压测数据具有多样性
${__Random(510000000050000000,590000000000000000)}
3. http请求内添加BeanShell 后置处理程序 将获取的字段值写在文件里。
1. 添加http请求,填写参数。
2. 根据上传不同文件类型,填写不同MIME类型。
1)数据文件是excel,MIME类型是application/vnd.ms-excel
2)数据文件是图片,MIME类型是application/octet-stream
3)数据文件是txt,MIME类型是text/plain
4)数据文件是.doc,MIME类型是application/msword
3. 数据文件和脚本必须存放在同一目录。
POST请求中content-type的三种数据类型:
content-type:application/x-www-form-urlencoded
,如果不指定content-type类型,默认用此类型。参数方式:Parameters参数格式和body data格式(key1=value1&key2=value2)均可。
注意:所以使用Parameters参数格式时,要么不设置content-type类型,要么设置content-type:application/x-www-form-urlencoded,不能用content-type:application/json类型去请求,否则报错!!!
content-type:application/json
,以Json格式编码数据体,方便传输结构化数据(相比键值对)。参数方式:body data为json格式
{
"key1":"value1",
"key2":"value2"
}
注意:使用Body Data时,Content-Type可传application/x-www-from-urlencoded或application/json,两者的区别是数据格式不同
content-type:multipart/form-data
,需要在表单中进行文件上传时,就需要使用该格式。参数方式:Parameters参数格式
示例:
在压测的过程中经常遇到吞吐量掉0的情况,比如下面两种情况
1、尖峰状的图形
与锯齿状类似,有一种更为激进的锯齿状图形,形成了独立的尖峰。这种图形跟锯齿状图形最大的不同是,尖峰状图形最低吞吐量会掉到0。
可能是网关限流的问题。
网关限流,而后端实际请求处理能力大幅超过网关限流的限额可能会导致这种波形图。比如后端实际处理请求能力是10000次/s,而网关限流是100次/s,所以当每秒有10000个请求过来的时候,后端在0.01内就处理完100个请求,而后面9900个请求则会因为限流100次/s而被丢掉,从而导致这种吞吐量集中在一个很小时间点的尖峰情况。
查看网关配置,看是否把限流设置得太低,从而影响了后端性能的发挥。进一步地,需要确认现网的网关是否有类型配置,如果存在网关限流影响性能,应当考虑是否需要上调网关限流的配置,从而发挥机器更大的性能。
2、平顶山峰的图形
与上一种尖峰型的图形不一样,有些图形掉到零以后会在高位徘徊一阵子,形成平顶山峰状
经过分析,是由于Redis CPU达到100%服务不可用所致,导致TPS值变为0,而后因为服务重启导致频繁掉0启动
遇到周期性掉0 的情况,可以优先检查内存、Redis的状况
经过验证,之前某个项目提供的脚本文件中有一个返回值解析的脚本,对接口返回值做转码,逐字符解析,某接口返回几千个字符,导致脚本性能急剧下降。
可以验证为什么该接口耗时很短,qps却很低。也可以验证为什么低并发反而qps更高。
如图所示,路径/interface/放在”服务器名称或者IP"后面在本地是可以跑起来,但是在集群上跑不起来,需要把位置挪下来
在本地jmeter调试脚本,返回connection refused 错误,如下图,可以看到访问的是本地IP+8866端口
解决问题思路如下:
1.考虑是否对网络做了限制,向相关运维人员反馈本地ip地址,得到反馈没有做限制。
2.用curl发相同的请求,发现可以请求成功,可以看到访问到正确的ip+端口。
3.对比了jmeter和jdk版本,发现我使用的是open jdk 14版本,更换成jdk1.8。
4.重新发送请求还是返回连接被拒的问题,根据返回的内容如下:可以看到访问的是本地IP+8866端口 和curl不一致,猜测是否是走了代理。
5.查看了网络代理(系统偏好设置—>WIFI—>高级—>代理),看到了http和htpps访问了代理,关闭后重新打开jmeter,请求访问成功。
6.更改代理的原因是,打开fiddler会配置代理
请参考:JMeter压测MQTT服务
1.首先需要确保使用k8s命令连上某个压测集群
2.下载软件和安装helm
git clone https://github.com/tkestack/charts.git
安装helm:brew install helm
PS:Mac 可以使用如下命令安装brew很快
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
3.进入到charts/incubator/jmeter-suite/charts/jmeter/values.yaml
,确保tag是V1.4最新版本
4.进入到charts/incubator/jmeter-suite/values.yaml
,需要设置压测节点的数量,数据库的大小,grafana登录界面的密码
# Default values for jmeter-helm.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
distributed-jmeter:
enabled: true
server:
replicaCount: 10
heap_size: 5g
master:
heap_size: 5g
image:
tag: "v1.4"
grafana:
enabled: true
adminUser: admin
adminPassword: ************
env:
GF_AUTH_ANONYMOUS_ENABLED: "False"
influxdb:
enabled: true
persistence:
enabled: true
## influxdb data Persistent Volume Storage Class
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner. (gp2 on AWS, standard on
## GKE, AWS & OpenStack)
##
# storageClass: "-"
size: 40Gi
5.安装jmeter-suite
cd charts/incubator/
helm install healthcard jmeter-suite
6.卸载方式如下
helm list
helm delete healthcard
检查pvc有没有删除
kubectl get pvc
kubectl delete pvc xxxx
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。