目录
3.slave机器配置(linux系统为例,windows资源杂乱不建议使用)
4.master机器配置(windows系统为例,作为命令下发者windows操作系统即满足使用)
4.2直接使用influxdb2来监控被测服务器的“硬件资源”
四、Jmeter与infludb2集成并展示在grafana中
4.1Jmeter把数据写入influxdb2数据库(推荐方法二)
4.1.1Jmeter把数据写入influxdb2数据库的方法一
4.1.2Jmeter把数据写入influxdb2数据库的方法二
4.2Grafana展示jmeter写入influxdb2的数据
一、jmeter分布式配置
1.分布式介绍
控制机称为调度机(master),被控制机(服务机器)称为执行机(slave)。执行时,master会把脚本同时发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的(GUI会占用系统资源),执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
JMETER 为什么需要分布式
单台压测机通常会遇到客户端瓶颈,受制于客户机的性能。可能由于网络带宽,CPU,内存的限制不能给到服务器足够的压力,这个时候你就需要用到分布式方案来解决客户机的瓶颈,压测的结果也会更加接近于真实情况.由于JMeter 并发的时候每并发一个用户(线程组)都需要消耗压测机的cpu、内存、带宽等服务器资源。随并发用户数量增加,单台压力机已经没法满足用户的业务需求,所以,需要通过分布式多台压测机。
假设当前单台压测机的内存配置为:8G,机器未部署其他的应用,只安装JDK 和 JMETER 等应用,该单台压测机并发的用户数量不能超过1000,如果并发用户数量超过1000,就会导致单台压测机内存消耗尽,JMETER 工具出现假死现象,聚合报告中间的响应时间就会失真,压测结果失去参考价值。所以,当并发用户数量超过1000 用户的时候,就需要采用分布式进行压测,一台压测机作为控制机器,另外一台机器做为代理机器。
2.配置JDK
无论执行机是windows系统还是linux系统,首先要配置好java环境
Windows版本JDK链接:https://pan.baidu.com/s/1G2VcZpnv6GuWlf5EYDtuNw 提取码:8888
LinuxJDK链接:https://pan.baidu.com/s/1LEIFnmGDDu4261aFeYRFRA 提取码:8888
Windows\Linux配置JDK:(https://blog.csdn.net/weixin_43080930/article/details/127428131)
3.slave机器配置(linux系统为例,windows资源杂乱不建议使用)
3.1将jmeter装入Linux服务器中,这个时候可以注意一下,调度机和执行机安装相同的jmeter和JDK版本,避免因为版本不同而导致运行报错
3.2 安装完成后进入jmeter目录下的bin目录中,打开jmeter.properties文件(以我为例完整路径为/root/apache-jmeter-5.4.1/bin/jmeter.properties),修改server.rmi.ssl.disable=false,改为true,并去掉注释
3.3启动目录下的jmeter-server文件
刚安装好jmeter后jmeter-server无法运行,需要给改文件权限 chmod 777 jmeter-server ,执行后文件名显示绿色可以运行改文件,,运行命令 ./jmeter-server,(输入一遍exit后文件开始执行,不知道为什么,瞎操作弄出来的)
如果遇到显示an error情况,有两种解决方式:
第一种:需要使用命令./jmeter-server -Djava.rmi.server.hostname=主机IP,主机IP为slave机器的IP(就是运行该文件的机器IP)
第二种:修改slave机器的jmeter-server文件,修改RMI_HOST_DEF=-Djava.rmi.server.hostname=主机IP,主机IP为slave机器的IP(就是运行该文件的机器IP)
修改完执行./jmeter-server,输入exit后显示
表示一台slave机器运行文件成功,等待调度机(master)下发运行脚本
如果需要多台slave机器,则重复上述步骤即可
4.master机器配置(windows系统为例,作为命令下发者windows操作系统即满足使用)
4.1要保证master与slave机器jmeter版本相同,打开jmeter/bin/ jmeter.properties,修改项如下:
server_port=1099
server.rm.localport =1099
server.rmi.ssl.disable=true //修改FALSE为TRUE
remote_hosts=192.168.4.170:1099,192.168.4.171:1099, //填入的是slave机器IP:端口,两台为例,多台slave机器用英文逗号分隔开即可
4.2在master机器上打开jmeter-运行-远程启动中可以看到已经添加成功
在运行-远程启动所有启动脚本,slaver机器显示starting、finished则表示命令下发执行成功,到此分布式jmeter配置完成
5.一些坑:
分布式主要是保证master机器与slaver机器连接成功,如果遇到两端无法连接问题,如下端口连接失败,无法互相ping通,则用以下处理方式
首先Slaver机查看端口 netstat -tunlp|grep 端口
端口有,但是还是ping不通,需要查看防火墙,firewall-cmd --zone=public --query-port=1099/tcp
上面则是系统没有启动FirewallID服务,(systemctl start firewalld.service #开启服务 使用该命令启动服务即可,systemctl enable firewalld.service #设置开机启动)
以44957该端口为例,显示no则是防火墙没有开放44957端口
firewall-cmd --zone=public --add-port=44957/tcp --permanent //开放44957端口
firewall-cmd --reload //重新载入 firewall
firewall-cmd --zone=public --query-port=44957/tcp //查看44957端口是否已经开放 显示yes 则开放成功。
6. 补充说明
6.1在进行分布式配置前,需要确保各个服务器之间可以互相ping或telnet,不然会影响发送和接收相关信息
6.2使用多个Linux服务器时,尽量保证多个服务器的时区相同,不然返回的结果时间可能会存在误差
6.3分布式并不是将一个jmeter脚本的请求分送给各个slave机器执行,而是在多个slave机器上同时执行jmeter脚本请求,所以如果线程为10,循环为1,请求为1,slave服务器为2台,那么两台机器同时启动所发送的请求为10*1*1*2=20次。
6.4如果你的jmeter测试脚本需要调用外部变量即csv文件等,需要将csv文件赋值到各个slave机器上的相同路径下,不然在slave机器运行时会取不到数据
二、influxdb2(时序数据库)安装配置
1.简介
是一个时序数据库,按照时间顺序来存储数据
2.数据库的安装
方法一:直接使用编译好的包
Os系统:linux—Ubuntu\centos
Releases · influxdata/influxdb · GitHub (包地址)
rpm:
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.3.0.x86_64.rpm (版本地址)
Yum install influxdb2-2.3.0.x86_64.rpm -y
启动:‘systemctl start influxdb’ ‘service influxdb start influxdb start’ ‘influxdb run’
方法二:docker方式来安装
安装docker
下面介绍离线安装:
文件自取-链接:https://pan.baidu.com/s/14NF2cl-hvzC8M5CiI0NiXA 提取码:8888
在linux环境下,创建/root/setup/docker目录,然后拷贝下载好的资源到此目录(可通过xftp工具直接上传到linux目录)
cd /root/setup/docker # 进入/root/setup/docker 文件夹
chmod +x install.sh # 为 install.sh添加执行权限
./install.sh -f docker-20.10.6.tgz # 安装
安装成功后,会出现如下信息:
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
docker 20.10.6 install success!
安装成功以后,检查安装状态:
docker info
小课堂:docker下载慢可以配置阿里镜像
阿里镜像:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
Os:centos+docker
安装:docker run -itd –name influxdb2 -p 8086
访问地址:http://influxdb_ip:8086 (以我为例 http://192.168.4.170:8086)
启动:docker start influxdb2
3.influxdb2.0数据库的使用
步骤
--UI界面中点击get start
--记住:org、bucket名称
--点击用户头像>about 看到org、userid
--点击data>APITokens 可以查看token信息
“oFE_m7WZKFnyKwQ5bmK06V-LARU1I4L69Y5liuy0OxotXbYyYtOuFHai2ieKVvsjj4OrQHNy5mx_Ctkoa_e2eg==”
--点击data>Buckets 可以查看bucket id
“afef7173deb750f5”
4.使用influxdb2进行监控
4.1influxdb2自带的监控,监控自身
点击boards>influxdb2.0 oss metrics
上图就是展示的influxdb2.0数据库所在机器的运行数据
4.2直接使用influxdb2来监控被测服务器的“硬件资源”
Data>telegraf>create confinguration>ststem continue
自定义名称点击create
被监控的机器安装telegraf
cat <<EOF | sudo tee /etc/yum.repos.d/influxdata.repo
[influxdata]
name = InfluxData Repository - Stable
baseurl = https://repos.influxdata.com/stable/\$basearch/main
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
sudo yum install telegraf -y
被测机器运行上图命令token
exportINFLUX_TOKEN=14av0RB3DIigk2u8ckEpiqXsSUhoIu5s9nUlwNYafwhef685YvVdqtJ4D6yxQAcR0uZnDVskjWjVZFJBogExeA==
被测机器运行上图命令Telegraf:
exportINFLUX_TOKEN=14av0RB3DIigk2u8ckEpiqXsSUhoIu5s9nUlwNYafwhef685YvVdqtJ4D6yxQAcR0uZnDVskjWjVZFJBogExeA==
boards>system可查看监控数据
三、Grafana安装配置
3.1简介:
Grafana 是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建、共享、浏览数据。dashboard中显示了你不同metric数据源中的数据,即一个可视化工具用于展示数据。我们使用它的目的是展示出influxdb2.0数据库中的数据
3.2安装:
方法一:编译包安装
Rpm: Releases · grafana/grafana · GitHub (只找到了版本没有找到rpm的地址)
方法二:docker方式
安装命令:docker run -itd –name Grafana -p 3000:3000 grafana/grafana
访问地址:http://grafana_ip:3000 账号/密码:admin/admin
3.3使用步骤:
--创建数据源
--选择influxdb
--Query language:选择flux
--URL:http://influxdb_ip:8086
--Influxdb details
--Save&test
引入模板(简单使用):
Import>14126 点击load 选择数据源 点击import
官方模板库:https://grafana.com/dashboards
四、Jmeter与infludb2集成并展示在grafana中
4.1Jmeter把数据写入influxdb2数据库(推荐方法二)
4.1.1Jmeter把数据写入influxdb2数据库的方法一
Jmeter的版本,要用5.4以上的版本写好脚本,然后添加后端监听器
监听器的实现:
Influxdburl: http://host_to_change:8086/write?db=jmeter&org=?&bucket=? 将host_to_change改为influxdb2_ip
添加influxdbToken ,填写了自己的APIToken
运行,结果报错:
ERROR o.a.j.v.b.i.HttpMetricsSender: Error writing metrics to influxDB Url: http://192.168.4.170:8086/write?db=jmeter&org=test&bucket=test-bucket, responseCode: 404, responseBody: {"code":"not found","message":"no dbrp mapping found"}
解决办法:
①要在influxdb2的机器上安装influxdb-cli,下载influxdb-cli软件
wget https://dl.influxdata.com/influxdb/releases/influxdb2-client-2.4.0-linux-amd64.tar.gz //下载
tar xvfz influxdb2-client-2.4.0-linux-amd64.tar.gz //解压
下载地址:Downloads
进入解压后的文件
②执行
#创建配置信息让influxdb-cli能连接到influxdb2
./influx config create --config-name influxdb-cli-config \
--host-url http://127.0.0.1:8086 \
--org test \
--token oFE_m7WZKFnyKwQ5bmK06V-LARU1I4L69Y5liuy0OxotXbYyYtOuFHai2ieKVvsjj4OrQHNy5mx_Ctkoa_e2eg== \
--active
#创建库
./influx v1 dbrp create \
--db jmeter \
--rp jmeter \
--bucket-id afef7173deb750f5 \
--default
③确认是否解决
无报错,问题解决接下来需要确认我们使用jmeter的后端监听器把数据写入了influxdb2的数据库中
④可以打开任意一个终端输入以下命令进行数据查询
curl --get http://192.168.4.170:8086/query \
--header "Authorization: Token oFE_m7WZKFnyKwQ5bmK06V-LARU1I4L69Y5liuy0OxotXbYyYtOuFHai2ieKVvsjj4OrQHNy5mx_Ctkoa_e2eg==" \
--data-urlencode "q=select * from jmeter.jmeter.jmeter order by time desc limit 2;"
4.1.2Jmeter把数据写入influxdb2数据库的方法二
后端监听器的实现:
InfluxdbUrl: http://192.168.4.170:8086/write?db=jmeter&org=test&bucket=test-bucket
Influxdb Token:(API Token)
确认数据是否更新入库
4.2Grafana展示jmeter写入influxdb2的数据
Grafana引入模板 ID5496(引入方法上文已讲),但是数据不能正常显示
原因:因为5496模板基于我们influxdb1.x版本的,不支持influxdb2.x高版本
Influxdb1.x版本,获取数据,用的是influxQL语言
Influxdb2.x版本,获取数据,用的是flux语言
Grafana中获取不到数据,怎么解决?
自己写模板 —难点就在怎么sql
Influxdb-ui界面>explore,选择Bucket名称,measure搜索jmeter(数据库中的表),filed你可以自己勾选(选择要展示/查询的数据),点击submit,点击script editor(生成查询语句在grafana中使用)
自定义图标展示成功
五、性能测试报告
性能测试报告
XXXX有限公司
XXXX年X月
版本记录
版本 | 作者 | 文档变化内容描述 | 日期 |
VXX | XX | XX | XXXX-XX-XX |
目录
本测试报告对XX系统的性能测试说明,主要对测试环境、测试范围说明和测试结果的总结、分析
报告适用以下读者:
测试人员:了解被测系统的性能测试策略和性能指标,可以作为迭代版本性能测试的参考数据;
产品经理:产品经理了解系统的现有性能指标,指导后续产品设计;
运营人员:运营人员了解系统的现有性能指标,便于运营推广工作的实施。
在大用户量、数据量的情况下,获得服务器运行时的相关数据,从而进行分析,找出系统瓶颈,提高系统的性能指标和稳定性。
本次性能测试范围包括如下接口:
XXXX
XXXX
ID | 操作系统 | 配置 | 部署服务 | IP |
服务器1 | CentOS 7 | CPU 8核 内存 16G 磁盘 1024G | XXXX | XXX.XXX.XX.XX |
服务器2 | CentOS 7 | CPU 8核 内存 16G 磁盘 1024G | XXXX | XXX.XXX.XX.XX |
服务器3 | CentOS 7 | CPU 8核 内存 16G 磁盘 1024G | XXXX | XXX.XXX.XX.XX |
测试工具:本次测试使用的负载工具是JmeterXX.X,这是一款成熟的、开源的性能测试工具。通过模拟用户实施并发负载及实时性能检测的方法来预测系统的行为并优化系统性能。
服务器监控工具:采用Grafana监控系统资源占用情况。
XXXX
总请求数 | 并发量 | 正确率% | TPS | 平均响应 | CPU% | 内存% | 持续时间 |
XXXX | XX | XX | XX | XX | XX | XX | XX |
服务器1
服务器2
如上,三大工具简单使用已完成,对于性能测试这只是个开始,后续会更新性能调优,码字不易望支持!