#1. 查看当前Linux系统是否已经安装java
rpm -qa | grep -i java
#2. 解压已上传的JDK压缩包,并移动到/usr/local目录下
mkdir /usr/local/hero
tar -zxvf /root/jdk-8u261-linux-x64.tar.gz -C /usr/local/hero
#3. 测试jdk
/usr/local/hero/jdk1.8.0_261/bin/java -version
#4. 配置环境变量
vim /etc/profile
G 跳转到最后一行
i 进入插入模式
export JAVA_HOME=/usr/local/hero/jdk1.8.0_261
export PATH=$PATH:$JAVA_HOME/bin
esc 进入命令行模式
:wq! 保存
#5. 更新环境变量
source /etc/profile
#6. 测试
java -version
# 1、下载、安装JMeter
wget -c https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.4.1.tgz
# 解压
tar -zxvf apache-jmeter-5.4.1.tgz -C /usr/local/hero
cd /usr/local/hero/apache-jmeter-5.4.1
# 2、配置环境变量
输入命令 vim /etc/profile ,在最下面添加如下内容:
export JMETER_HOME=/usr/local/hero/apache-jmeter-5.4.1
export PATH=$JMETER_HOME/bin:$PATH
# 3、保存后,输入命令 ,使修改的配置生效。
source /etc/profile
# 4、测试是否安装成功
jmeter -v
监控原理:
配置服务端代理:
注意:服务器硬件资源的监控,必须在服务端安装serverAgent代理服务,jmeter才能实现监控服务端的cpu、内存、io的使用情况。
ServerAgent下载地址:https://github.com/undera/perfmon-agent/blob/master/README.md
## 默认启动运行 startAgent.sh 脚本即可
## 服务启动默认4444端口,根本连接不上,因此自己创建一个部署脚本文件对此进行部署,且把端口修改为7879
nohup java -jar ./CMDRunner.jar --tool PerfMonAgent --udp-port 7879 --tcp-port 7879 > log.log 2>&1 &
## 赋予可执行权限
chmod 755 startAgent.sh
启用7879端口后,服务器的cpu,io,内存使用情况就顺利的监控到了。
为什么需要非GUI模式运行?
Don’t use GUI mode for load testing !, only for Test creation and Test debugging.
JMeter是Java语言开发,实际是运行在JVM中的,GUI模式运行需要耗费较多的系统资源,一般来说,GUI模式要占用10%-25%的系统资源。而使用非GUI模式可以降低对资源的消耗,提升单台负载机所能模拟的并发数。
1、启动JMeter,创建脚本【配置后置监听器,将数据打到InfluxDB】
如何查看压测结果:
脚本保存为helloworld.jmx,然后将文件上传至压测服务器。
2、运行脚本
上传本地配置好的测试脚本至压测服务器,执行测试命令
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
# 参数说明
-h 帮助:打印出有用的信息并退出
-n 非 GUI 模式:在非 GUI 模式下运行 JMeter
-t 测试文件:要运行的 JMeter 测试脚本文件
-l 日志文件:记录结果的文件
-r 远程执行:启动远程服务
-H 代理主机:设置 JMeter 使用的代理主机
-P 代理端口:设置 JMeter 使用的代理主机的端口号
-e:测试结束后,生成测试报告
-o:指定测试报告的存放位置
(1) 运行压测,记录压测结果
jmeter -n -t 01-helloworld.jmx -l 01-helloworld.jtl
(2) 运行压测,生成压测报告
jmeter -n -t 01-helloworld.jmx -l 01-helloworld.jtl -e -o ./01-helloworld-report-html
运行结果如下图:
3、查看测试报告
在测试计划中我们要及时的添加JDBC驱动链接。这里我用的mysql数据库是5.7版本,那么我相对应的JDBC驱动选择了5.x版本。JDBC驱动可以在mysql的官网下载,具体地址是:https://dev.mysql.com/downloads/file/?id=477058
下载驱动界面,不需要登录,直接下载即可:
下载后解压文件夹,把文件夹中的mysql-connector-java-8.0.17.jar copy到jmeter安装目录的bin文件下(其实不用放在bin目录下,只需要使用jmeter浏览jar所在位置即可)
添加JDBC Connection Configuration(JDBC连接池也有人叫连接组)
需要设置jdbc线程池名称,这个变量在JDBC Request中要使用的;还有要设置Database URL,格式为:
jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC&characterEncoding=utf-8
注意:
- ?后面的serverTimezone=UTC&characterEncoding=utf-8不能缺少,否则会报时区错误。
- 在配置的时候,jmeter如果报1045-Access denied for user ‘root’@‘localhost’(using password: YES)这类错误,请重置访问用户的密码,以及给与该用户权限。
重要配置说明
Variable Name :数据库连接池的名称
JDBC Connection Configuration 算是一个数据库连接池配置
Variable Name:连接池唯一标识,后面JDBC Request需要用到。
Max Number of Connection: 池中允许的最大连接数,可以设置为20,也可以将其设置为零(0),这意味着没有线程池。
Max Wait:参数表示从连接池获取连接的超时等待时间,单位毫秒
Database URL 数据库连接 URL
JDBC Driver class 数据库驱动
Username 数据库登录用户名
Password 数据库登录密码
注意:
思考:
其他基本保持默认就行,也可根据需要进行修改 ,如下是所有参数详解:
1.连接池参数配置:
字段 | 含义 |
---|---|
Max Number of Connections | 最大连接数;做性能测试时,可以填 0。在开发的项目中按实际代码填写,默认是20。 |
Max Wait(ms) | 在连接池中取回连接最大等待时间,单位毫秒 |
Time Between Eviction Runs(ms) | 运行清除空闲connection的销毁线程间隔时间 |
Auto Commit | 自动提交sql语句,如:修改数据库时,自动 commit |
Transaction isolation | 事务隔离级别 |
Preinit Pool | 立即初始化连接池如果为 False,则第一个 JDBC 请求的响应时间会较长,因为包含了连接池建立的时间 |
字段 | 含义 |
---|---|
Test While Idle | 空闲时测试 |
Soft Min Evictable Idle Time(ms) | 最小可收回空闲时间(ms) |
Validation Query | 一个简单的查询,用于确定数据库是否仍在响应,默认为jdbc驱动程序的 isValid() 方法,适用于许多数据库 |
字段 | 含义 |
---|---|
Database URL | 数据库连接 URL |
JDBC Driver class | 数据库驱动 |
Username | 数据库登录用户名 |
Password | 数据库登录密码 |
Connection Properties | 建立连接时要设置的连接属性 |
数据库 | 驱动 | URL |
---|---|---|
MySQL | com.mysql.jdbc.Driver | jdbc:mysql://host:port/{dbname} |
PostgreSQL | org.postgresql.Driver | jdbc:postgresql:{dbname} |
Oracle | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:user/pass@//host:port/service |
sqlServer | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://host:port;databaseName=databaseName |
右键点击“连接mysql”,再添加一个采样器:JDBC request,在jmeter中request可以编辑select和insert等不同的采样器类别。即通过不同的类别添加配置我们需要的对mysql不同的操作。比如
select id from tb_seckill_goods where id=1;
参数讲解:
测试结论:连接数为0,数据库1.5W+的TPS
# openresty 下载地址
http://openresty.org
http://openresty.org/cn/download.html
# 安装依赖环境
yum -y install pcre pcre-devel openssl openssl-devel zlib zlib-devel gcc curl
# 下载openresty,根据最新版本下载即可,版本换为最新版本即可
# https://openresty.org/download/openresty-1.17.8.1.tar.gz
wget https://openresty.org/download/openresty-1.13.6.1.tar.gz
tar -zxvf openresty-1.13.6.1.tar.gz
cd openresty-1.13.6.1
./configure
# 默认会被安装到/usr/local/openresty目录下
# 编译并安装
make && make install
cd /usr/local/openresty
# 启动nginx
/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
ps -ef | grep nginx
# 停止nginx
/usr/local/openresty/nginx/sbin/nginx -s stop #停止服务
# 重新加载配置,修改配置后执行
/usr/local/openresty/nginx/sbin/nginx -s reload
可以发现,nginx访问成功了,说明openresty已经ok了!!
# 搜索redis镜像
docker search redis
# 拉取redis镜像
docker pull redis:5.0
# 创建容器,设置端口映射
docker run -id --name=redis -p 6379:6379 redis:5.0
# 配置开启6379端口
# 使用外部机器连接redis,测试
(1)拉取mysql镜像
docker pull mysql:5.7
(2)创建容器
docker run -di --name=cmysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin mysql:5.6
docker run -id --name=c_mysql -p 3306:3306 \
-v /root/mysql/logs:/logs \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
docker cp c_mysql:/etc/mysql/conf.d .
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码
(3)设置容器开机自动启动
docker update --restart=always 容器ID
(4)远程登录mysql
连接宿主机的IP ,指定端口为3306
Docker+JMeter+InfluxDB+Grafana+node_exporter
开始时,在阿里云配置四台4C8G按量计费的服务器。注意:用完记得释放资源,免得一直计费!
1)yum 包更新到最新
sudo yum update
2)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3)设置yum源为阿里云
配置yum源的代理,类似于maven镜像仓库,加速下载软件。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4)安装docker
sudo yum install docker-ce
# 启动
systemctl s
5)安装后查看docker版本
docker -v
1)下载InfluxDB的镜像:
docker pull influxdb:1.8
2)启动InfluxDB的容器,并将端口 8083 和 8086 映射出来:
docker run -d --name influxdb -p 8086:8086 -p 8083:8083 influxdb:1.8
3)进入容器内部,创建名为jmeter的数据库:
进入 jmeter-influx 容器
docker exec -it influxdb /bin/bash
influx
命令,即可进入 influx 操作界面create database jmeter
命令,创建名为 jmeter 的数据库show databases
命令,查看数据库创建成功root@517f57017d99:/# influx
Connected to http://localhost:8086 version 1.7.10
InfluxDB shell version: 1.7.10
> create database jmeter
> show databases
4)使用JMeter 库, select 查看数据,这个时候是没有数据的:
use jmeter
命令,应用刚才创建的数据库select * from jmeter
命令,查询库中有哪些数据> use jmeter
> select * from jmeter
想要将 JMeter的测试数据导入 InfluxDB ,就需要在 JMeter中使用 Backend Listener 配置
implementation 选择 InfluxDB所对应的:
注意:云服务器配置开启端口8086
influxdbMetricsSender org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
influxdbUrl http://47.93.59.248:8086/write?db=jmeter
application hero_mall_one
measurement jmeter
summaryOnly false
samplersRegex RT*
percentiles 90;95;99
testTitle 压力测试案例01
eventTags
运行 Jmeter 脚本,然后再次在 influxdb 中查看数据,发现类似下面的数据说明输入导入成功:
docker pull grafana/grafana
启动Grafana容器,将3000端口映射出来
docker run -d --name grafana -p 3000:3000 grafana/grafana
网页端访问http://101.200.146.199:3000验证部署成功
默认账户密码:admin\admin
数据源创建成功时会有绿色的提示:
模板导入分别有以下3种方式:
在Grafana的官网找到我们需要的展示模板
导入模板,我这里选择输入模板id号,导入后如下,配置好模板名称和对应的数据源,然后 import 即可
展示设置,首先选择创建的application
注意: 如果我们修改过表名,也就是在jmeter的Backend Listener的measurement配置(默认为jmeter),这个时候就需要去设置中进行修改,我这里使用的就是默认的,所以无需修改。
# 下载
wget -c https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
# 解压
tar zxvf node_exporter-0.18.1.linux-amd64.tar.gz -C /usr/local/hero/
# 启动
cd /usr/local/hero/node_exporter-0.18.1.linux-amd64
nohup ./node_exporter > node.log 2>&1 &
注意:在被监控服务器中配置开启端口9100
http://101.200.87.86:9100/metrics
# 下载
wget -c https://github.com/prometheus/prometheus/releases/download/v2.15.1/prometheus-2.15.1.linux-amd64.tar.gz
# 解压
mkdir /usr/local/hero/
tar zxvf prometheus-2.15.1.linux-amd64.tar.gz -C /usr/local/hero/
cd /usr/local/hero/prometheus-2.15.1.linux-amd64
# 运行
nohup ./prometheus > prometheus.log 2>&1 &
在prometheus.yml中加入如下配置:
- job_name: 'hero-Linux'
static_configs:
- targets: ['172.17.187.78:9100','172.17.187.79:9100','172.17.187.81:9100']
测试Prometheus是否安装配置成功
http://101.200.146.199:9090/targets
导入Linux系统dashboard
在prometheus.yml中加入如下配置:
- job_name: 'hero-Linux'
static_configs:
- targets: ['172.17.187.78:9100','172.17.187.79:9100','172.17.187.81:9100']
测试Prometheus是否安装配置成功
http://101.200.146.199:9090/targets
[外链图片转存中…(img-Xwsf19JI-1705312571930)]
[外链图片转存中…(img-5VptCKxc-1705312571930)]
[外链图片转存中…(img-Q8HhpFA3-1705312571930)]
导入Linux系统dashboard
[外链图片转存中…(img-zIFCRsea-1705312571931)]
[外链图片转存中…(img-2ZgxSfL0-1705312571931)]
部署一下我给大家提供的服务,暂时不给源码,仅测试用。