JMeter使用小记
# JMeter 使用小记
# 下载与安装
- jdk 下载地址:https://www.oracle.com/java/technologies/downloads/#jdk18-windows
- JMeter 下载地址:https://jmeter.apache.org/download_jmeter.cgi
教程参考:JMeter下载及安装详细教程-CSDN博客 (opens new window)
# 设置中文界面
JMeter 安装打开后默认语言是英文,修改为中文的方法也很简单,目前笔者发现了 3 种修改语言的方法,如下文。
# 方法1
——修改 Options 依次点击 Options-->Choose Language-->Chinese(Simplified) 即可配置成中文简体,需注意的是该方法只对当次生效,下次打开 Jmeter 依然是英文。如需永久生效,请使用下面两种方法。
# 方法2
——修改 jmeter.properties 文件
- 打开 jmeter 解压缩文件下的 bin 目录,找到 jmeter.properties 文件并用编辑器打开,
- 在
#Preferred GUI language
下面插入一行language=zh_CN
,修改后保存(如果有language=en
需要注释掉) - 重新启动 Jmeter 界面显示为中文简体
# 方法3
——修改 jmeter.bat 文件
- 使用编辑器打开 JMeter 启动文件 jmeter.bat
- 将
set JMETER_LANGUAGE=-Duser.language="en" -Duser.region="EN"
修改成set JMETER_LANGUAGE=-Duser.language="zh" -Duser.region="CN"
,保存代码 - 重新启动 Jmeter 界面显示为中文简体
# 设置使用中文
修改默认编码
# The encoding to be used if none is provided (default ISO-8859-1)
#sampleresult.default.encoding=ISO-8859-1
2
修改成 UTF-8
并放开注释:
# The encoding to be used if none is provided (default ISO-8859-1)
sampleresult.default.encoding=UTF-8
2
# 请求中“参数”和“消息体数据”的用法区别
参考文章:jmeter请求中“参数”和“消息体数据”的用法区别 - soz追光者 - 博客园 (opens new window)
# 提取并设置全局变量
- 需要添加【后置处理器】:JSON 提取器、调试后置处理程序、BeanShell 后置处理程序,进行参数变量的提取。
- 需要添加【配置元件】:HTTP 信息头处理器,进行变量的传递。
- 其中用到的表达式可用 Jmeter 工具自动生成。(函数助手)
需要用到的工具:
1、JSON 提取器
2、BeanShell 后置处理程序
- 表达式可用【函数助手】生成
函数助手(在工具栏)的使用:
1、提取全局变量
2、使用全局变量
# 线程组的串行与并行执行
勾选【测试计划】界面中的以下这个按钮,则为【串行】否则为【并行】。
# 聚合报告相关信息
聚合报告(Aggregate Report)是 JMeter 中一个非常重要的监听器,用于展示性能测试结果的统计信息。
以下是对聚合报告的一些关键点的解释:
- 生成方式:聚合报告可以通过两种方式生成,一种是从已有的
.jtl
文件加载生成报告,另一种是在运行 JMeter 时动态生成聚合报告。 - 数据来源:聚合报告的数据来源于 SampleResult,每一行代表一个请求,同名请求的结果会合并显示。
- 界面介绍:聚合报告界面提供了多个指标,包括
- Label(请求名称)、
- #Samples(样本数,即请求数量)、
- Average(平均响应时间)、
- Median(中位数)、
- 90% Line、
- 95% Line、
- 99% Line(这些指标表示响应时间的百分位数)、
- Min(最小响应时间)、
- Max(最大响应时间)、
- Error%(错误率)、
- Throughput(吞吐量,每秒完成的请求数)
- 以及数据传输速率(KB/sec)。
- 关键指标:在分析聚合报告时,需要特别关注异常%、吞吐量、最大TPS和最大并发数等指标。异常%表示错误请求的比例,吞吐量反映了服务器的处理能力,最大TPS和最大并发数有助于确定系统的性能瓶颈。
- 结果分析:聚合报告提供了详尽的数据,帮助我们全面了解系统在不同负载下的表现,找到性能瓶颈,并制定相应的优化方案。
- 注意事项:在使用聚合报告时,注意不要在测试计划中使用相同的请求取样器名称,因为聚合报告是累加的,即每次运行的结果统计都是基于前一次运行的结果进行统计。
- 百分位数:聚合报告中的百分位数(如90% Line、95% Line、99% Line)表示相应百分比的请求响应时间不会超过该值,这有助于我们了解响应时间的分布情况。
- 图形结果:JMeter 的“图形结果”(Graph Results)监听器可以以图形形式展示响应时间随时间的变化趋势,帮助我们发现哪些请求响应时间较长。
示例分析
以下是对报告中主要数据的分析:
- 样本数量(# Samples):报告中显示的样本数量为 500,这意味着测试中发送了 500 个请求。
- 平均响应时间(Average):平均响应时间为 47 毫秒,这表示所有请求的平均响应时间为 47 毫秒。
- 中位数响应时间(Median):中位数响应时间为 30 毫秒,这表示一半的请求响应时间小于或等于 30 毫秒。
- 百分位响应时间(90%、95%、99%):
- 90% 百分位响应时间为 94 毫秒,表示 90% 的请求响应时间小于或等于 94 毫秒。
- 95% 百分位响应时间为 94 毫秒,表示 95% 的请求响应时间小于或等于 94 毫秒。
- 99% 百分位响应时间为 111 毫秒,表示 99% 的请求响应时间小于或等于 111 毫秒。
- 最小响应时间(Min):最小响应时间为 140 毫秒,这表示最快的请求响应时间为 140 毫秒。
- 最大响应时间(Max):最大响应时间为 25 毫秒,这表示最慢的请求响应时间为 25 毫秒。
- 异常百分比(% Errors):异常百分比为 0.00%,这表示没有请求出现错误。
- 吞吐量(Throughput):吞吐量为 486.97/sec,这表示每秒处理的请求数量。
- 接收和发送的数据量(Received/Sent KB/sec):接收数据量为 1786.72 KB/sec,发送数据量为 132.17 KB/sec,这表示每秒接收和发送的数据量。
- 平均字节数(Average bytes):平均字节数为 375,这表示每个请求的平均数据量。(这一项会在【汇总报告】中显示)
# 测试小记
# 基础概念
- 并发量:指在同一时间点内,系统中同时处理的用户请求数(是个相对的值,不是绝对值)
- 响应时间:指系统处理一个请求所需的时间
- 吞吐量:是指系统在给定时间内处理的业务请求数量
- QPS (Queries Per Second):表示系统每秒钟处理的请求数量
- TPS(Transactions Per Second):表示系统每秒钟完成的事务数量(实际就是吞吐量)
# QPS 和吞吐量的区别?
QPS(Queries Per Second)和吞吐量(Throughput)都是衡量系统性能的指标,但它们的含义和计算方式有所不同。
- QPS(Queries Per Second):QPS 是指每秒钟系统能够处理的请求数量,通常用于衡量系统的并发处理能力。在 Web 应用中,QPS 表示每秒钟能够处理的 HTTP 请求次数。QPS 越高,系统的并发处理能力越强,能够同时处理更多的请求。
- 吞吐量(Throughput):吞吐量是指在一定时间内系统实际处理的任务量或数据量。在计算机领域,吞吐量通常表示每秒钟系统能够处理的数据量或事务量。吞吐量越高,表示系统能够在单位时间内处理更多的任务或数据。
参考:【修正版】QPS、TPS、RT、并发数、吞吐量理解和性能优化深入思考-阿里云开发者社区 (opens new window)
# 测试思路分析
- 测试接口的性能,通过【聚合报告】查看相关信息
- 通过修改服务器的【jvm参数】来检测内存大小对接口性能的影响,查看是否会有【内存泄漏】的现象
- jvm 参数示例:
-Xms2048m -Xmx2048m
,-Xms128m -Xmx128m
- jvm 参数示例:
# 最高并发数探测方法
- 增加线程数,指到出现异常
- 增加线程数,直到平均响应时间超过预期的值(依项目而定,比如买票最多让用户等待 2 秒)
# JVM 参数解释
-Xms
:设置JVM启动时的初始内存大小。例如,-Xms2048m
表示初始内存大小为2048兆字节(MB)。-Xmx
:设置JVM最大可用内存大小。例如,-Xmx2048m
表示最大内存限制为2048MB。
# 内存泄漏(Memory Leak)
内存泄漏是指在计算机程序中因为疏忽或错误导致的一种内存分配问题。当一个程序的可执行文件在运行时分配了内存给某个变量或对象,但在释放这个内存之前失去了对这块内存的引用,就会发生内存泄漏。简单来说,内存泄漏就是指程序在申请内存后,无法释放已经申请的内存空间。
# 内存泄漏的影响
- 性能下降:随着时间的推移,内存泄漏可能导致应用程序消耗越来越多的内存,从而降低性能。
- 响应延迟:内存泄漏可能导致垃圾回收器频繁运行,增加系统的响应延迟。
- 服务中断:在极端情况下,内存泄漏可能导致应用程序或系统耗尽所有可用内存,从而引发服务中断或崩溃。
# 如何检测内存泄漏
- 监控工具:使用内存监控工具(如 Java 的 VisualVM、MAT 等)来观察内存使用情况。
- 性能测试:在不同的 JVM 参数设置下进行压力测试和性能测试,观察内存使用模式。
- 日志分析:分析应用程序日志,检查是否有异常或错误可能与内存泄漏相关。
- 代码审查:审查代码,特别是那些管理资源分配和释放的部分,确保没有逻辑错误。
# 调整 JVM 参数的目的
- 性能评估:评估不同内存设置对应用程序性能的影响。
- 资源优化:找到最优的内存配置,以提高应用程序的响应速度和吞吐量。
- 稳定性测试:测试在高负载情况下应用程序的稳定性和内存管理。