Jmeter笔记


Jmeter小白记录一些学习笔记

- 为什么需要做性能测试?

  1. 确认服务器是否能够满足用户使用需求:评估当前服务器能够承载多少用户量
  2. 成本确认:通过峰值评估出部署服务器数量、配置,即最小化成本
  3. 评估系统系性能,提供系统容量规划、应用调优的依据

1. 什么是性能测试

模拟多个用户的操作对服务器硬件性能的影响

TPS(Transaction per Second) 每秒事物处理能力,可包含多个请求
RT(Response Time) 响应时间
QPS(Queries-per-second) 每秒查询率,即每秒请求数,单个请求
PV(Page Views) 页面访问量
UV(Unique Visitor) 独立访客数

性能指标

并发用户数
QPS每秒请求数
每秒响应时间(最大、最小、平均值)
错误率
机器性能:CPU idle30%、memory无剧烈抖动或者飙升
压测过程中接口功能是否正常

在这里插入图片描述

  • 基准场景
    单业务单用户场景;找到单业务最大TPS和最有响应时间
  • 容量场景
    递增场景,最大TPS,最快相应时间场景,得到最终系统可正常运行的最大TPS和最有响应时间。即系统的最优运行状态

压测目标预估

  1. 读取nginx配置数据

cat /data/logs/nginx/access.log | awk -F: '{print $8}' | awk '{print $2}' | sort | uniq -c | sort -k 1 -nr||head
获取到请求量最高的接口

2. 常见性能压力测试用具

工具说明
Apache abApache HTTP服务器性能基准工具。命令行终端工具。支持HTTP协议
Apache JMeterJava语言开发,开源免费。支持多种协议
LoadRunnerC语言开发,收费软件。支持多种协议
LocustPython语言开发,开源免费。支持很多协议,有web操作界面
nGrinderJava语言开发的性能测试平台,免费。Naver公司基于Grinder开发。Grinder是一个能够运行jython(在JVM上运行Python)、groovy编写测试脚本的应用程序。

- Jmeter安装

1. JDK安装

确保本地环境的JDK安装和配置 (Jmeter4.x最好使用JDK8以上的版本)

2. Jmeter安装

官网根据环境下载压缩包解压安装即可
1. Windows:下载zip压缩包
2. Mac、Linux:下载tgz压缩包

Mac环境可以通过brew install jmeter命令安装

3. 快速启动Jmeter

进入安装好的Jmeter文件夹的bin ,双击启动文件即可启动
1. Windows:jmeter.bat文件启动
2. Mac、Linux:jmeter.sh文件启动
bash Downloads/apache-jmeter-5.6.2/bin/jmeter.sh

4. Jmeter目录核心文件说明

  1. bin:核心执行文件、配置文件
    • 启动文件:

    jmeter.bat
    jmeter

    • 分布式压测使用的启动文件:

    jmeter-server.bat
    jmeter-server

    • 核心配置文件

    jmeter.properties

  2. extras:插件拓展包
  3. lib:核心依赖包
    • ext文件:核心包
    • junit:单元测试包

- Jmeter使用

1. 中文语言设置

  1. 临时修改语言
  • Jmeter GUI图形界面的菜单栏找到Options 点击
  • 找到Choose Language
  • 选中需要修改的语言即可改变当前界面的语言表示
    再次启动Jmeter时该语言设置无效
  1. 永久性的语言修改
  • 找到安装文件夹下面的bin/jmeter.properties文件以文本形式打开
  • 找到#language=en修改为language=zh_CN,保存
  • 再次启动Jmeter,即为永久行的中文

2. 正则表达式提取器

https://www.cnblogs.com/qmfsun/p/5906462.html
https://blog.csdn.net/u010949766/article/details/79154374
https://blog.csdn.net/wanglha/article/details/50781503

  1. 变量说明
    • 引用名称 : 变量名即引用参数名,调用方式${变量名}
    • 正则表达式 : 顾名思义就是获取变量值的正则表达式,() 里面表达式获取到的内容则是变量值,即你提取的数据
    • 模版 :通过$n$ 写入使用哪个正则获取到的值
      1. n=-1 全部
      2. n=0 随机
      3. n=1 第一个
      4. n=2 第二个
        (只有一个正则的情况下,n=1;多个正则表达式的情况就需要根据你需要而定)
    • 匹配数字:-1表示全部、0表示随机、1表示第一个、2表示第二个
    • 缺省值:没有匹配正则表达式的情况下,定义的默认值
  2. 需要查看提取出来的值
    请求>添加>后置处理器:Debug PostProcessor,运行即可查看

3. Debug PostProcessor

https://blog.csdn.net/hualusiyu/article/details/53503990

4. ThreadGroup

- JMeter压测结果分析

针对结果查看树分析

  1. 正则表达式提取分析
  2. CSS选择器
  3. Xpath提取
  4. JSON提取

- JMeter聚合报告

  1. 平均值:所有请求的平均响应时间
  2. 中位数:50%的用户响应时间不超过这个值
  3. 99%line:99%的用户响应时间不超过这个值
  4. error line 异常百分比:错误请求数/总请求数
  5. throughput 吞吐量:默认情况下每秒处理完成的请求数
  6. received KB/sec 接收数据

- JMeter分布式压测

单台服务器不能满足同时处理一台服务器性能测试的测试。即单机引发的性能瓶颈,比如cpu、内容以及IO等,所以需要多台服务器来进行测试。

具体内容可参考官方文件:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html#terminology

配置

  1. 工作节点部署(slave)
  1. 负载机配置
    负载机和jmeter控制端通信的端口设置为tcp协议的1099。不配置端口也可关闭防火墙即可
  2. bin目录下配置文件修改
  • jmeter.properties文件
    关闭SSL认证:server.rmi.ssl.disable=true
  • system.properties文件
    java.rmi.server.hostname=当前服务器ip
  1. 启动当前服务器(bin目录文件下)
    windows环境:jmeter-server.bat
    mac或linux环境:jmeter-server
  1. 控制端部署(master)
  1. 本机端口配置
    端口号=4445。不配置端口也可关闭防火墙即可
  2. bin目录配置文件修改
  • jmeter.properties文件
    • 添加所有负载机的ip,并以逗号隔开:remote_hosts=192.168.101.61,192.18.31.22
    • 关闭SSL认证:server.rmi.ssl.disable=true
  1. 本机执行压测脚本
  • 图形化界面
    • 启动本机jmeter
    • 启动所有负载机器,并运行所有负载机器
  • 命令行操作
    ./jmeter.sh -n -t test.jmx -l test.jtl -R 192.168.101.61,192.18.31.22
    • -n 非GUI模式下运行
    • -t test.jmx 指定压测脚本
    • -l test.jtl 记录压测日志
    • -R 负载机器ip,多个以逗号隔开(jmeter.properties文件remote_hosts配置项的内容)

参考文献

搜索了一下相关内容的文献,觉得这个文献较为详细,并且还附了问题的处理方案,很赞。
https://blog.csdn.net/m0_67695717/article/details/125975558

- 性能监控体系

1. 监控系统

JMeter+InfluxDB+Grafana

  • InfluxDB储存测试数据。Go语言开发的开源分布式时序数据库
  • Grafana将结果图形化呈现。一个可视化面板工具

- 部署InfluxDB

  1. 新建容器网络
    docker network create grafana-network
  2. 创建并运InfluxDB容器
    docker run -d --name=influxdb --network grafana-network -p 8086:8086 -v ${pwd}/influxdb/:/var/lib/influxdb/ influxdb:1.7.10
  3. 创建influx数据库
    • 方式一:使用http请求方式
      - 创建数据库
      > curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE jmeter_db"
      - 查看数据库
      > curl -i -XPOST http://localhost:8086/query --data-urlencode "q=SHOW DATABASE ;"

    • 方式二:终端命令
      - influxdb容器进入influx操作界面
      > docker exec -it influxdb influx
      - 执行sql语句
      > 新建数据库create database jmeter_db
      > 查看数据库show database
      > 使用jmeter_db数据库use jmeter_db
      - exit退出即可

- 部署Prometheus

Prometheus是一款实用Go开发的开源系统监控和报警工具。通过使用各种export工具来收集服务器性能数据。通常使用Prometheus监控压测时服务器性能指标。

  1. docker创建并运行容器
    docker run -d --name prometheus --network grafana-network -p 9090:9090 -v ${PWD}/prometheus.yaml:/etc/prometheus/prometheus.yaml prom/prometheus:v2.16.0 --comfig.file=/etc/prometheus/prometheus.yaml
  • ${PWD}/prometheus.yaml是本地的文件,可通过https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus.yaml下载
# my global config
global:
  scrape_interval: 15s # 主动采集数据的频率
  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: "prometheus" # 给需要采集数据的每台服务器配置个名字

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs: # 静态配置
      - targets: ["localhost:9090"] # 需要采集数据的服务器ip和端口

scrape_configs配置查看
在这里插入图片描述2. 针对监控主机性能,就需要在对应需要采集数据的服务器安装export工具

  • 下载地址:https://github.com/prometheus/node_exporter/releases
  • 解压缩该文件并放置制定地址即可
  • 使用方式./node_exporter --help参考
  • 使用node_exporter时服务器默认监听9100端口。可是使用./node_exporter --web.listen-address="当前服务器ip:预期设置的端口"指定端口启用

比如改成9102,使用nohup ./node_exporter --web.listen-address="当前服务器ip:9102" &
cat nohup查看node_exporter启动输出日志

  1. 访问node_exporter:http://当前服务器ip:9102
  2. 更改prometheus.yaml配置文件,添加待监控服务器配置数据。将以下内容添加到scrape_configs即可
  - job_name: "node1" # 给需要采集数据的每台服务器配置个名字
    static_configs: # 静态配置
      - targets: ["上述安装node_exporter服务器的ip:9102"]
  1. 重启prometheus容器:docker restart prometheus
  2. 访问http://安装prometheus容器的服务器ip:9090/targets即可查看到配置的待监控服务器配置数据

State=UP表示正常

- 部署Grafana

  1. 创建并运Grafana容器
    docker run -d --name=grafana --network grafana-network -p 3000:3000 grafana/grafana:6.6.2
  2. http://部署Grafana容器的服务器ip:3000访问即可
  3. 默认登录账号admin/admin
dashboard工具

https://grafana.com/grafana/dashboards/
在这里插入图片描述

配置InfluxDB数据源
  1. 配置Data Sources

选择InfluxDB
URL=http://InfluxDB容器的ip:8086。亦或者InfluxDB容器本身就和Grafana容器在一个容器网络里,使用http://InfluxDB容器的容器名:8086亦可

  • 获取容器ip
    - docker exec -it influxdb sh
    - cat /etc/hosts
    Database=jmeter_db
    Min time interval(数据刷新时间,秒为单位)=5(jmeter写入InfluxDB默认为5秒,所以这里建议5秒或者小于5秒刷新一次数据)
  1. 配置dashboard
    使用https://grafana.com/grafana/dashboards/5496,点击load
    在这里插入图片描述
配置Prometheus数据源

收集服务器的数据。同配置influxDB一样操作。
3. 配置Data Sources

选择Prometheus
URL=http://Prometheus容器的ip:9090。亦或者Prometheus容器本身就和Grafana容器在一个容器网络里,使用http://Prometheus容器的容器名:9090亦可
Scrape Interval=15s

  1. 配置dashboard
    https://grafana.com/grafana/dashboards/8919导入工具

- JMeter

  1. 压测脚本配置后端监听器
    请添加图片描述
  • influxdbUrl=http://部署InfluxDB容器的服务器ip:8086/write?db=jmeter_db
    • jmeter_db:是在InfluxDB容器创建的数据库
  • measurement=jmeter
    • jmeter:是Grafana配置dashboard时,导入influxDB,设置Measurement name的值
  • 面板是否展示详细的错误信息
    • summaryOnly=false:展示错误信息
    • summaryOnly=true:不展示错误信息
  1. 运行压测脚本
  2. 访问刷新http://部署Grafana容器的服务器ip:3000查看性能测试结果数据

- 问题处理

  1. missing class com.thoughtworks.xstream.converters.ConversionException
  • 主要原因
    因为缺少jar包导致,具体缺少什么包可以通过 jmeter plugin manager
  • 解决方案
    下载plugins-manager.jar,将其放置在jmeter安装文件的lib/ext
    重启Jmeter即可

- 场外知识

本地启动测试服务

python -m http.server 8099
使用ptyhon启动一个8099端口的服务,即可使用http://本地ip:8099访问

查看本地环境中Java进程使用情况

使用jconsole命令打开 Java监视和管理控制台窗口
在这里插入图片描述在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值