1 需求分析
1.1 需求
1、 单实例SkyWalking主机CPU80%时,测试其支持TPS值是否能达到5000
2、 单实例SkyWalking主机持续加压2小时,TPS5000时,测试SkyWalking的稳定性
3、 对SkyWalking集群性能测试,测试其TPS为5000时,集群的负载是否均衡
4、 分析 SkyWalking Agent探针对被测试服务的性能影响
官网给出参考:单实例SkyWalking的cpu为80%时,tps为5000
1.2 测试策略
-
tps已知,5000
-
验证性需求,单实例SkyWalking主机CPU指标80%左右时,测试tps值
-
稳定性测试,单实例SkyWalking主机持续加压2小时,tps5000
-
SkyWalking集群性能测试,采用jmeter集群压力机测试,测试SkyWalking集群负载是否均衡
-
通过加SkyWalking Agent探针和不加探针,分别压测,分析SkyWalking Agent探针对被测服务167的性能影响
2 设计测试场景
-
单个订单接口模拟应用程序,被测主机167
-
单实例SkyWalking145主机监控被测服务167,采用逐步加压方式,测试145的CPU达80%左右时,TPS值是否可达5000,加压大约6分钟
-
单实例SkyWalking145主机监控被测服务167,TPS值维持5000,持续加压2小时,测试稳定性
-
SkyWalking集群监控被测服务167,TPS值维持5000,集群压力机加压30分钟,测试SkyWalking集群负载是否均衡
-
通过加SkyWalking Agent探针和不加探针,单台压力机分别压测10分钟,分析SkyWalking Agent探针对被测服务167的性能影响
3 环境部署
3.1 组网图
单实例SkyWalking监控被测服务167组网图如下:
集群 SkyWalking监控被测服务167组网图如下:
注:所有机器部署在同一网段下
3.2 硬件配置
两台压力机171和178均为Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz,8核8G
其他主机均为Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz,4核8G
3.3 测试工具
-
采用jmeter脚本压测
-
采用collectd+influxdb+grafana作为实时监控,其监控数据可持久保存,方便查询
-
采用netdata作为实时监控,压测时,观察比较方便
3.4 测试环境部署
171和178作为压力机,173作为调度机,三台机器均安装jmeter
3.4.1 jmeter安装和环境变量设置
-
centos7,/home目录下,创建jmeter用户
useradd jmeter && echo jmeter | passwd --stdin jmeter
-
官网下载jmeter安装包,解压
bing.com搜索jmeter,下载安装包,直接解压即可
解压后,user.properties文件末端添加:
CookieManager.check.cookies=false
-
配置环境变量
jmeter环境变量配置:
sudo vi /etc/profile
末尾添加:
export JMETER_HOME=/home/jmeter/apache-jmeter-4.0
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH:$HOME/bin
保存后source下,使其生效
source /etc/profile -
检查环境变量是否生效
# jmeter --help
_ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____
/ \ | _ \ / \ / ___| | | | ____| | | \/ | ____|_ _| ____| _ \
/ _ \ | |_) / _ \| | | |_| | _| _ | | |\/| | _| | | | _| | |_) |
/ ___ \| __/ ___ \ |___| _ | |___ | |_| | | | | |___ | | | |___| _ <
/_/ \_\_| /_/ \_\____|_| |_|_____| \___/|_| |_|_____| |_| |_____|_| \_\ 4.0 r1823414
Copyright (c) 1999-2018 The Apache Software Foundation
To list all command line options, open a command prompt and type:
jmeter.bat(Windows)/jmeter.sh(Linux) -?
--------------------------------------------------
3.4.2 分布式压力机配置和启动
压力机171/178配置如下:
jmeter的bin目录下jmeter.properties中:
remote_hosts=10.34.110.171 #本机IP
server_port=1099 # 前面注释去掉
server.rmi.localport=1099 # 前面注释去掉
server.rmi.ssl.disable=true
除此之外,服务器配置了双网卡,内外网的隔离,jmeter在启动时会优先找内网地址,不识别配置的服务器地址,修改方法如下:
/apache-jmeter-4.0/bin目录下jmeter-server文件:
RMI_HOST_DEF=-Djava.rmi.server.hostname=10.34.110.171 #将前面注释去掉,并修改为压力机的IP
保存后,执行命令./jmeter-server
,看到启动的IP和端口1099即可
实际压测时,可将压力机后台运行,nohup ./jmeter-server &
调度器173配置如下:
jmeter.server中:
remote_hosts=10.34.110.171:1099,10.34.110.178:1099
server_port=1099
server.rmi.localport=1099
server.rmi.ssl.disable=true
修改后,保存即可
3.4.3 分布式实时监控部署
collectd+influxdb+grafana环境搭建之前已写过,参考如下:
3.4.4 实时监控netdata部署
netdata部署之前已写过,参考netdata实时监控部署
4 编写测试脚本
-
单一订单接口,http请求,post方法
-
思考时间10ms
-
固定吞吐量,保持tps在5000左右
-
关闭监听器,断言,debug sample等,保存脚本,并传到173调度机上
5 执行测试脚本
-
173调度机上执行测试脚本命令如下:
nohup jmeter.sh -R 10.34.110.171:1099,10.34.110.178:1099 -n -t SkyWalking_test.jmx -l ../jtl/rpjq01.jtl -e -o ../report/rpjq01 &
后台运行执行脚本,可通过日志查看执行记录,执行完成后,可生成html的报告
-
日志如下
tailf jmeter.log
-
关停
因已配置jmeter的环境变量,关停测试时,任意路径下执行stoptest.sh即可,此时压力机不再加压,但仍在启动中;
若执行shutdown.sh命令,则关闭压力机,重新执行时,需先开启压力机
-
观察后台监控netdata和grafana面板,需要时,做好记录
6 收集数据,给出报告
jmeter的报告以文件夹方式生成,打成zip包,下载到本地,解压,访问html页面即可
实时监控grafana可查看压测过程的曲线图
结果分析
7 发送报告,归档,通知需求方
出具测试报告,并提交