第2节:项目性能优化(中)

Jmeter插件使用

首先我们安装完插件配置后,要在插件中心安装这两个插件

下载成功后出现以下结果:

响应时间

  • 响应时间:jp@gc - Response Times Over Time

活动线程数

  • 活动线程数:jp@gc - Active Threads Over Time

每秒事务数

  • 每秒事务数:jp@gc - Transactions per Second
  1. RT(响应时间)
    • 平均值:332ms
    • P50(中位数):8ms 内
    • P90:514ms 内
    • P95:1051ms 内
    • P99:6797ms 内
    • 最小值:2ms
    • 最大值:35s
  1. 压力机活动线程数
    • 代表压测过程中施加的压力情况
  1. TPS(每秒事务数)
    • 数值越大,性能越好
  1. QPS(每秒查询数量)
    • 数值越大,性能越好
    • (TPS >= QPS)
  1. 吞吐量(每秒请求数量)
    • 数值越大,性能越好

压测监控平台

压测平台架构图:

Docker环境配置

首先我们需要配置docker环境

复制代码
# 1.更新yum包
sudo yum update -y

# 2.安装软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 3.设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4.安装docker
sudo yum install docker-ce

# 5.检查docker版本
docker -v

安装InfluxDB

复制代码
# 1.下载镜像
docker pull influxdb:1.8

# 2.启动容器
docker run -d --name influxdb -p 8086:8086 -p 8083:8083 influxdb:1.8

# 3.进入容器创建jmeter数据库
docker exec -it influxdb /bin/bash

操作influxDB

复制代码
# 进入操作界面
influx

# 创建数据库
create database jmeter

# 查看数据库是否创建成功
show databases

创建完的结果为

复制代码
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> create database jmeter
> show databases
name: databases
name
----
_internal
jmeter
> 

使用influxDB

复制代码
# 使用jmeter库
use jmeter

# 查询数据库中的数据
select * from jmeter

设置Jmeter脚本后置监听器

  • influxdbUrl:需要改为自己influxdb的部署ip和映射端口,我这里是部署在阿里云服务器,所以就是47.93.59.248,口是容器启动时映射的8086端口,db后面跟的是刚才创建的数据库名称
  • application:可根据需要自由定义,只是注意后面在 grafana 中选对即可
  • measurement:表名,默认是 jmeter ,也可以自定义
  • summaryOnly:选择true的话就只有总体的数据。false会记录总体数据,然后再将每个transaction都分别记录
  • samplersRegex:样本正则表达式,将匹配的样本发送到数据库
  • percentiles:响应时间的百分位P90、P95、P99
  • testTitle:events表中的text字段的内容
  • eventTags:任务标签,配合Grafana一起使用

然后我们启动压测工具,再查看数据库表,发现出现以下结构

安装Grafana

复制代码
# 1.下载Grafana镜像
docker pull grafana/grafana

# 2.启动Grafana容器
docker run -d --name grafana -p 3000:3000 grafana/grafana

访问连接:http://guslegend:3000/login,默认用户名/密码:admin/admin

选择添加数据源

导入模版

  • 直接输入模版id号;
  • 上传模版json文件;
  • 输入模版json内容;

在Grafana的官网找到我们需要的展示模板

  • Apache JMeter Dashboard
    • dashboad-ID:5496
  • JMeter Dashboard(3.2 and up)
    • dashboad-ID:3351

启动压测工具,查看结果

安装node_exporter

复制代码
# 下载
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 &

安装Prometheus

复制代码
# 下载
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.2.linux-amd64.tar.gz -C /usr/local/hero/
cd prometheus-2.15.2.linux-amd64

# 运行
nohup ./prometheus > prometheus.log 2>&1 &

配置prometheus.yml文件

复制代码
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'hero-Linux'
    static_configs:
    - targets: ['172.17.0.1:9100','172.17.0.1:9100','172.17.0.1:9100']

访问:http://guslegend:9090/graph

在Grafana中配置Prometheus的数据源

导入Linux系统dashboard

  • Node Exporter for Prometheus Dashboard EN 20201010
    • dashboard-ID: 11074
  • Node Exporter Dashboard
    • dashboard-ID: 16098
相关推荐
技术小甜甜6 分钟前
[AI架构] 云模型 vs 本地模型:企业AI部署的架构选择
人工智能·ai·架构·创业创新
裴云飞38 分钟前
Compose原理十二之CompositionLocal
架构
龙码精神42 分钟前
ClickHouse 容灾技术方案(两方案对比+落地细节)
后端·架构
shangjian0071 小时前
OpenClaw学习笔记-01-架构篇
笔记·学习·架构
code 小楊1 小时前
深度解析RAG系统与AI Agent:原理、架构及协同落地
人工智能·架构
无忧智库1 小时前
破局与重构:大型集团财务共享业财一体化的数字基因革命(PPT)
大数据·架构
weixin199701080162 小时前
《淘宝双11同款:基于 Sentinel 的微服务流量防卫兵实战》
微服务·架构·sentinel
Shining05962 小时前
AI 编译器系列(五)《拓展 Triton 深度学习编译器——DLCompiler》
人工智能·深度学习·学习·其他·架构·ai编译器·infinitensor
hf2000122 小时前
美团 x 云器|从美团BI平台升级看数据引擎架构升级演进路径
架构·数据湖·湖仓一体·lakehouse
掘根2 小时前
【微服务即时通讯】用户管理子服务2
微服务·云原生·架构