安装插件
Jmeter_jmeter-plugins插件的安装使用 - 码上测 - 博客园
1. 梯度压测
并发量是指在同一时间点或在一个特定的时间段内,同时对服务器或系统发起请求的虚拟用户(线程)的数量
步骤1: 安装插件: custom thread groups
找到: custom thread groups , 再点击 apply changes and restart jmeter 即可安装成功
对应插件位置:
具体配置对应的语义和并发行为如下图所示:
this goup will start语义: 表示最多启动多大线程。对应图中的峰顶的值
first wait for语义: 从运行之后多长时间开始启动线程;若设置为60秒, 对应图中开头的底部横线。
then start语义: 表示第一次要启动几个线程。 对应图中第一个上升线。
next add语义 + threads every 语义: 表示每隔多少秒启动多少个线程。对应图中的上升梯度线。
using ramp-up 语义: 其中与普通线程组一样表示启动线程的时间。 对应图中的上升梯度线的斜度,越大越斜表示用的时间越久。
then hold load for语义: 表示达到最大线程后保持最大线程持续执行多久。 对应图中的峰顶的横线。
finally sotp + threads every语义: 达到峰顶后,表示每隔多少秒释放多个线程。 对应图中的下降梯度线
步骤2: 性能测试过程中的监控
在插件列表搜索: jpgc ,勾选对应的插件,再点击 apply changes and restart jmeter 即可安装成功
在监听器下可看到对应的插件
步骤3: 查看性能指标: 可通过聚合报告、汇总报告来查看
响应时间
若响应时间超过了要求,则代表了到了瓶颈 ;
性能的要求是由:产品,业务,技术负责人来要求的
注意事项: 看在多少线程的时候,发生了超标
响应时间的变化的原因: 系统不稳定,随着并发压力变大而越来越慢
举例:假设我们要求响应时间 小于10ms , 得到时间点,然后在 线程组的图中,得到当前压测的线程组数量
错误率
错误率很高的原因: 接口请求错误,服务器处理不了,后端系统限流
qps
qps :Queries Per Second , 比如 进入淘宝,只看数据 ; 指系统每秒能够处理的查询或请求数量,是衡量系统性能的重要指标之一。在性能测试中,QPS 通常用于评估系统在高并发场景下的处理能力
QPS 与其他指标的关系
QPS 与并发用户数:
QPS 与并发用户数成正比,但并非线性关系。当并发用户数增加到一定程度时,QPS 可能达到系统瓶颈,不再增长
QPS 与响应时间:
当 QPS 增加时,响应时间可能会逐渐变长。如果响应时间急剧增加,可能意味着系统已达到性能瓶颈
QPS 与错误率:
当 QPS 超过系统处理能力时,错误率(如超时、5xx 错误)可能会显著上升
如何优化 QPS
优化代码:
减少不必要的计算和数据库查询。
使用缓存(如 Redis)减少重复请求的处理时间
增加硬件资源: 提升 CPU、内存、磁盘 I/O 等硬件资源。使用负载均衡分散请求压力
数据库优化:优化 SQL 查询,添加索引。 使用数据库连接池减少连接开销
异步处理: 将耗时操作异步化,减少请求处理时间
吞吐量
-
系统在单位时间内处理的请求数量或数据量
-
可以用多种单位表示:请求数/秒、页面数/秒、字节数/秒等
查看吞吐量的变化,当吞吐量相对稳定,或者变低 ----则说明达到了系统的性能瓶颈
tps
tps :transaction, 比如进入淘宝, 购买东西产生数据变化 ;系统每秒能够处理的事务数量
TPS 的定义
-
事务(Transaction):在性能测试中,事务通常指一个完整的业务操作。例如:
-
用户登录。
-
下单支付。
-
数据库插入或更新操作
-
如何优化 TPS
在性能测试中,如果 TPS 低于预期,可以从以下方面进行优化:
-
服务器性能:检查服务器的 CPU、内存、磁盘 I/O 等资源是否充足。
-
网络延迟:确保网络带宽和延迟不会成为瓶颈。
-
数据库优化:优化查询语句、索引和连接池配置。
-
代码性能:检查应用程序代码是否存在性能问题。
-
JMeter 配置:
-
增加线程数(模拟更多用户)。
-
调整 ramp-up 时间(逐步增加负载)。
-
使用分布式测试(多台机器同时测试)。
-
吞吐量变化规律
波动很大 ----代表系统不稳定
慢慢变高 ----和并发量相关联,当并发量小于吞吐量的时候,慢慢增大并发量, 吞吐量增加 , 若一直在变高,则说明并发量还不够
慢慢变低 ---- 并发量减少 ; 系统变卡,导致并发量减少
2. 性能指标
一、核心性能指标分类
1. 系统资源指标(服务器侧)
指标 | 说明 | 正常范围 | 监控工具 |
---|---|---|---|
CPU使用率 | 处理器负载情况 | <70% (长期) | top , nmon , Prometheus |
内存使用率 | 物理内存和Swap占用 | <80% (避免OOM) | free -m , Grafana |
磁盘I/O | 读写吞吐量(MB/s)和延迟(ms) | 依赖磁盘类型(SSD/HDD) | iostat , sar |
网络带宽 | 入站/出站流量(Mbps) | 不超过带宽的80% | iftop , nload |
2. 应用性能指标(JMeter直接测量)
指标 | 计算公式/说明 | 行业基准 | JMeter获取方式 |
---|---|---|---|
吞吐量 (Throughput) | 请求数/秒 = 总请求数/测试时长(s) | 越高越好 | Aggregate Report |
响应时间 (Response Time) | 从请求发送到接收响应的时间(平均/90%/95%分位) | <1s (Web), <100ms (API) | Summary Report |
并发用户数 (Concurrent Users) | 同时活跃的虚拟用户数(≠线程数) | 根据业务需求设定 | Active Threads Listener |
错误率 (Error Rate) | 错误请求数/总请求数 × 100% | <1% | HTML Report |
TPS (Transactions Per Second) | 每秒完成的事务数(如登录/支付) | 业务关键指标 | Transactions per Second |
Latency | 请求发送到开始接收响应的时间(网络延迟) | 越接近响应时间越好 | Latency vs Time |
QPS (Queries Per Second) | 每秒查询率:系统每秒能够响应的查询请求数量 | ||
PV (Page Views) | 页面浏览量:页面被加载显示的总次数 | ||
UV (Unique Visitors) | 独立访客数:统计周期内访问系统的唯一用户数 基于用户标识(如cookie/账号/IP+设备) |
二、关键指标详解与JMeter实现
1. 吞吐量(Throughput)
-
定义:系统每秒处理的请求数(RPS)。
-
JMeter查看:
-
Aggregate Report 中的
Throughput
列 -
Throughput Shaping Timer 控制目标吞吐量
-
2. 响应时间分布
-
关键分位数:
-
平均响应时间:易受极端值影响
-
90% Line:90%请求的响应时间低于此值(更可靠)
-
-
JMeter图表:
graph LR A[Response Times Over Time] --> B[发现响应时间突增] A --> C[定位性能瓶颈]
3. 并发模型
-
并发用户 ≠ JMeter线程数:
-
实际并发 =
活跃线程数 × 循环次数 / 测试时长
-
-
监控工具:
-
Active Threads Over Time 监听器
-
三、行业基准参考
应用类型 | 平均响应时间 | 可接受错误率 | 吞吐量要求 |
---|---|---|---|
电商网站 | <2秒 | <0.5% | 1000+ RPS |
金融API | <200ms | <0.1% | 300+ TPS |
物联网设备上报 | <1秒 | <1% | 5000+ messages/sec |
3. 分布式压测
分布式压测(Distributed Load Testing)是指将压力测试任务分散到多台机器上同时执行,以模拟大规模用户并发访问系统的测试方法
分布式压测准备工作
1. 环境要求
-
所有机器(主控机和执行机)需要在同一局域网
-
所有机器安装相同版本的 JMeter 和 Java
-
关闭防火墙或开放相应端口(默认使用 1099 和随机端口)
2. 执行机(Slave)配置
步骤 1: 修改 jmeter.properties 文件
# 取消注释并修改server.rmi.ssl.disable为true server.rmi.ssl.disable=true # 设置执行机的RMI端口(可选) server_port=1099
步骤 2: 启动执行机
jmeter-server.bat (Windows) 或 ./jmeter-server (Linux/Mac)
3. 主控机(Master)配置
步骤 1: 修改 jmeter.properties 文件
# 取消注释并修改remote_hosts,添加所有执行机IP remote_hosts=192.168.1.101,192.168.1.102,192.168.1.103 # 取消注释并设置server.rmi.ssl.disable为true server.rmi.ssl.disable=true
执行分布式测试
-
在主控机打开 JMeter GUI
-
创建或打开测试计划
-
通过菜单运行测试:
运行(R) > 远程启动 > 选择单个执行机 或 运行(R) > 远程启动所有
注意事项
数据文件处理:
如果测试中使用 CSV 等数据文件,需要确保所有执行机都有相同的文件路径
或者使用主控机的文件,JMeter 会自动分发
监听器数据:
默认情况下,监听器只显示主控机数据
要获取所有执行机数据,需使用 "聚合报告" 等监听器
网络带宽:
确保网络带宽足够,避免成为瓶颈
资源监控:
监控执行机的 CPU、内存和网络使用情况