Linux环境下使用JMeter进行压力测试 (linux下运行jmeter)

随着人类社会的进步,计算机系统的运算能力越来越强,同时系统所能处理的数据也越来越庞大。然而,无论多么强大的计算机系统,在高负载或大并发访问的情况下,仍然可能出现响应时间过长或系统崩溃的问题,这些问题都需要通过压力测试来解决。

压力测试是指对一个系统进行模拟,使用一定的负载模型模拟多个用户对系统进行操作,检测系统在面对高负载情况下的效率表现和瓶颈点。在压力测试中,JMeter是一款常见的工具,它是一个基于Java语言的软件,可以对各种服务器、客户端、协议进行测试。

本文主要介绍如何在。

一、安装JMeter

1、下载JMeter

JMeter官网为 https://jmeter.apache.org/。用户可以根据自己的操作系统选择下载相应的版本,本文以Linux版本为例。

2、解压并安装JMeter

执行以下命令,解压JMeter包:

tar zxvf apache-jmeter-*.tgz

解压后将JMeter移动到指定位置:

sudo mv apache-jmeter-*/ /usr/local/bin/jmeter

3、检查Java环境

JMeter是Java编写的,因此需要检查是否安装Java环境。执行以下命令,检查 Java环境:

java -version

如果 Java 环境已安装,则会输出 Java 版本信息,否则需要先安装 Java 环境。

二、一般的操作

JMeter是一个非常强大的工具,支持各种协议的测试,包括HTTP、UDP、TCP、FTP、Web Service、SOAP等。同时,JMeter还支持各种应用服务器的测试,如Tomcat、JBoss、Web Logic等。

下面我们以HTTP协议为例,介绍一般的操作流程。

1.添加线程组

线程组是JMeter进行测试的基本单元。线程组中可以添加多个线程,每个线程代表一个用户。执行以下操作,添加线程组:

a.在Test Plan中右键->Add->Threads(Users)->Thread Group

b.在Thread Group中,添加需要测试的网站信息,如HTTP请求地址、端口号等。

2.添加HTTP请求

在JMeter中,HTTP请求是最为基础的请求,下面我们以HTTP协议为例,添加HTTP请求。

a.在Thread Group中添加HTTP请求,如下图所示。

b.在HTTP Request中配置需要测试的URL地址。

c.在HTTP Request中配置需要测试的参数信息,如下图所示。

3.添加用例

在JMeter中,每个用例代表一个需要测试的功能点,必须添加至少一个用例。执行以下命令,添加用例:

a.在Thread Group中,右键单击->Add->Sampler->HTTP Request

b.配置HTTP Request的请求路径、请求模式等。

c.配置HTTP Request的参数信息。

4.添加监听器

JMeter在测试过程中,可以实时监测系统的状态,如下图所示。监听器是JMeter监测系统状态的工具,在压力测试中,监听器非常重要,可以提供压力监测、性能监测等信息,让我们更好地了解系统的状态。

a.在Thread Group中,右键单击->Add->Listener->View Results Tree

b.查看结果,如下图所示。

5.运行测试

在测试前,需要配置测试参数,如线程数、请求频率等。配置完成后,点击运行按钮,开始测试,如下图所示。

6.查看测试结果

测试完成后,可以在监听器中查看测试结果。结果显示了每个请求的执行结果、执行时间、响应时间等。如下图所示。

结论

本文介绍了在的具体操作流程。在进行压力测试时,首先要了解测试的目的,并根据目的制定测试计划和测试方案。同时,还需要注意配置线程数和请求频率等参数,以便更好地了解系统的状态和性能瓶颈。

通过对JMeter的学习和使用,可以更好地进行压力测试,检测系统性能并优化系统。在测试中,我们还需要注意测试数据的真实性和稳定性,以便得到更准确的结果。

相关问题拓展阅读:

jmeter怎么远程监控linux服务器

①.下载JMeterPlugins相关的jar包,放jmeter的安装路径\lib\ext下——这个时候启动jmeter会发现,添加监听器时,出现辩槐高了一堆携尺的jp@jc……,这明裂些就是插件的功劳。

②.下载ServerAgent解压后,放到要监控的Linux服务器的某个路径下,eg:我的路径是/home/azureuser/program/ServerAgent下,切换此路径下,执行./startAgent.sh即可启动监控插件。

需要注意:ServerAgent启动要依赖jdk哦,jdk安装过程略(安装符合Linux版本的jdk,首先要uname -a查看Linux的操作系统信息,方便下载合适的jdk版本)

Jmeter 问题锦集

java.io.FileNotFoundException:rmi_keystore.jks

文件校验问题

1、不进行文件校验,打开 \bin\jmeter-server

.bat

文件

2、运行 create-rmi-keystore.bat (Windows)/ create-rmi-keystore

.sh

(Linux) 文件并自行填写相关信息,运行后,bin 目录下会多出一个 rmi_keystore.jks 文件,然后将这个文件拷贝到想要运行的 slave 机上,就可以不使用方法1

Error in rconfigure() method java.rmi.ConnectException: Connection refused to host: 192.168..; nested exception is:

java.net.ConnectException: Connection timed out: connect

1、192.168.. 这个IP 可能是虚配逗拟网卡的 IP,关闭所有的虚拟网卡,只保留本地网络

2、检查slave服务器的防火墙是否打开,需要关闭

3、通信双方的机器没有识别到有效的远程IP,考虑将远程方法调用服务器的主机IP进行固定设置,再作效果检查

4、开始测试,但是测试速度非常慢,测试结果也是非常大的值,检查slave服务器和被测试服务器之间是否可以 ping 通地址

第3点分析相应解决方法:

Master机修改 jmeter.bat (windows)/ jmeter.sh (Liunx)

Error in rconfigure() method java.rmi.ConnectException:Connection refused to host

1、查看端口是否被占用

1、更换端口

java.net.ConnectException:Connection timed out:connect

由于连接被拒绝,这意味着防火墙可能已切断连接

需要在JMeter和目标服务器之间粗纳打开端口

Response too large to be displayed. Size:>

未设置察看结果树的大小

1、打开 \bin\user.property 文件

2、右击

测试用例

——添加——监听器——保存响应到文件, 填写要保存的文件名

3、将文件中的返回结果粘贴到此用例的响应断言中

Not able to find Java executable or version. Please check your Java installation. errorlevel=2

1、errorlevel=1,当前系统安装的 jdk 版本过低

2、errorlevel=2,没有配置 jdk

环境变量

所致

3、errorlevel=3,当前系统安装的 jdk 版本过低,不符合 jmeter 要求所致

通用方法:

配置对应这个 jmeter 版本的 jdk 版本的环境变量

第1点分析,其他解决方法:

打开 jmeter.bat 文 件,注释 set DUMP=-XX:+HeapDumpOnOutOfMemoryError

Bad call to remote host

1、检查 salve 机器上的 jmeter-server 是否启动

2、检查岩卖没 JMeter.properties 中 remote_hosts 的配置是否错误

1、启动 salve 机器上的 jmeter-server

2、正确配置 JMeter.properties 中 remote_hosts

1、Non HTTP response message: The target server failed to respond

2、Non HTTP response code: java.net.SocketException

调整超时时间,jmeter 的 http 请求中,工具会默认勾选 Use KeepAlive ,在运行时,jmeter.properties 中的 httpclient.timeout 设置默认是注销的,也就是连接空闲,立马断开

打开 \bin\jmeter.properties 文件

根据情况设置10-60毫秒,能解决报错问题,问题还是没有真正解决

Server failed to start: java.rmi.RemoteException: Cannot start. is a loopback address.

An error occurred: Cannot start.is a loopback address.

没有指定主机导致这个错误

1、修改 hosts 文件

2、打开 \bin\jmeter.properties 文件

Waiting for possible shutdown message on port 4445

在 master 跑测试脚本时,会一直提示如下信息,导致测试一直跑不起来

这个是用于监听shutdown message的,如果不需要,可以直接设置为0即可

打开 \bin\jmeter.properties 文件

Could not reserve enough space forKB object heap

errorlevel=1

Jmeter 内存不足

打开 \bin\jmeter.bat 文件

could not find ApacheJmeter_core.jar

找不到 jdk 环境

1、正确安装对应版本的 jdk

2、正确设置环境变量

jmeter.gui.action.RemoteStart: Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:

配置了 127.0.0.1,但是未开启本机的 jmeter-sever.bat/jmeter-sever

开启本机的 jmeter-sever.bat/jmeter-sever

运行成功,响应断言也正确通过,但是察看结果树里为空

模式(Mode)(采样结果发送模式)默认是Standard,在采样结果产生后立即发送

打开 \bin\jmeter.properties 文件

Response code: Non HTTP response code: java.net.SocketTimeoutException

Response message: Non HTTP response message: connect timed out

发生该错误时,jmeter已经连接上服务器,查看load time没有超过设定的request timeout时间,错误可能的原因是,服务器那边未处理该线程的请求,或者为保证服务能力,断掉了连接。

为了验证该猜想,持续大于半小时向服务器发送该并发数量的请求,一段时间后,request收到503的response,证明猜想

Java.NET.BindException: Address already in use: connect

短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIMEWAIT 状态,过段时间(默认240s)才释放,(用netstat -na可以看到),最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports ,这段区间在之间)

在运行 JMeter agent 的机器上,添加

注册表

条目HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

jmeter脚本运行的过程中,服务器性能参数没有明显变化 (CPU,内存,I/O),但request的响应时间很长。

观察jmeter agent机器网络使用情况,网络使用持续达到带宽的限制峰值。request 发送的过程中pending在网络中,实际并发的request并没有同一时间到达服务器,所以服务器没有明显变化。

提高jmeter agent机器

网络带宽

java.io.IOException: Error writing to server

java.net.SocketException: Connection reset

可能是本机的 JVM 太小了

打开 \bin\jmeter.bat 文件

java.net.SocketException: Unrecognized Windows Sockets error: 0: recv failed

打开 \bin\jmeter.properties 文件

java.net.SocketTimeoutException: Read timed out

打开 \bin\jmeter.properties 文件

For performance it is advised to check “Interpret Condition as Variable Expression”

and use __jexl3 or __groovy evaluating to true or false or a variable that contains true or false.

${JMeterThread.last_sample_ok) can be used to test if last sampler was successful

对于4.x之后的版本 JMeter 中的 If Controller,在Expression输入框中直接输入判断的表达式,如1 == 1、${threadNum} > 2,而不做求值计算(true/false)就执行JMeter是没有效的,达不到预期的效果。采用JMeter比较早期的版本(如:2.x版本),直接就写判断的表达式,并没有作真假求值运算也能被识别

1、在Expression输入框中,建议将判断条件解释为变量表达式,并使用__jexl3函数或__groovy函数对该变量表达式求值为true/false

2、可输入值为true/false的变量

3、${JMeterThread.last_sample_ok}可用于检测最后一个取样器是否成功执行

java.lang.IllegalStateException: Engine is busy – please try later

1、可能是防火墙规则被阻止

2、控制机、执行机未设置需要连接的IP

1、关闭控制机、执行机的防火墙

2、打开 \bin\jmeter-server 文件

3、打开 \bin\system.properties 文件

Response code: Non HTTP response code:org.apache.http.conn.ConnectTimeoutException

Response message: Non HTTP responsemessage: Connect to 10.15.107.112:9089 timed out

Non HTTPresponse code 说明没有收到来自服务器的 response。

导致 ConnectTimeoutException 错误的可能有 JMeter 本身问题,也可能是服务器问题。

通过分布式运行 JMeter 的方式来消除 JMeter 本身的影响

JMeter基础

一、Jmeter简介

—–>生成不同格式的测试报告

以WEB性能测试为例:jmeter可以作为web服务器与浏览器之间的代理网关,以便捕获浏览器的请求和web服务器的响应,如此就可以很容易地生成性能测试脚本。有了性能测试脚本,jmeter就可以通过线程来模拟真实用户对web服务器的访问压力。这与LoadRunner的工作原理基本一致( 向服务器提交请求;从服务器获取请求返回的结果 )

二、JMeter下载安装

1、安装环境要求

Unix(Solaris,Linux,etc) 、 Windows(98,NT,2023,XP,WIN8)

2、JDK下载、安装

右键计算樱侍机属性->高级系统设置->系统属性->高级->环境变量->添加如下的系统变量:

变量值:D:Program FilesJavajdk1.8.0_92【jdk安装路径】

变量值: .;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;

运行cmd->输入java -version->显示java版本就表示jdk安装成功

3、JMeter下载安装

4、JMeter环境配置

变量值:E:apache-jmeter-4.0 (就是jmeter保存的路径,即jmeter解压路径)

如:JMETER_HOME=D:apache-jmetesapache-jmeter-4.0

变量值:

;%JMETER_HOME%/lib/ext/ApacheJMeter_core.jar;%JMETER_HOME%/lib/jorphan.jar;%JMETER_HOME%/lib/logkit-2.0.jar

5、Jmeter 的Bin目录下的几个重要文件

6、启动Jmeter

三、JMeter组件介绍 (JMeter常用组件)

1、测试计划(Test Plan)

注:什么是元素?

JMeter的不同组件称为Elements。 每个元素都是为特定目的而设计的。

2、线程组(Threads)

例如,如果将线程数设置为100; JMeter将创建并模拟100个用户对被测服务器的请求

所有的控制器和取样器都是在某个线程组下;

3、逻辑控制器(Logic controller)

逻辑控制器允许在线程中定义处理请求的顺序。它允许控制“何时”将用户请求发送到Web服务器。例如,可以使用随机控制器随机向服务器发送HTTP请求

例如:我们在收邮件时,只需要登录一次邮箱既可查看多封邮件。如果这个场景我们在Jmeter中实现,我们需要控制登录的次数,如何实现呢?Jmeter逻辑控制器中的仅一次控制器就可以完成。当然了,控制器不只是这一个,还有很多其他的控制器来完成我们的各种需求。

除了为“线程组”指定的循环值之外,循环控制器使取样器运行一定次数。例如,如果你

将一个HTTP请求添加到循环控制器,循环计数为50

将“线程组”循环计数配置为2

然后,JMeter将发送总共50 * 2 = 100个HTTP请求。

除了循环值= 2,你为上面的线程组指定。所以JMeter将发送总共2 * 50 = 100个HTTP请求。

又如:线程组中设置循环次数3,循环控制器中设置循环测试2,

即:线程组的循环与循环控制器为父子关系,且循环控制器只对子请求有效

注:录制脚本的循环按循环控制器中的调协循环

作为循环控制器的子节点脊态吵,仅一次控制器在每循环的之一次迭代时均会被执行

HTTP请求、FTP请求、JDBC请求

这3个请求应该闭基运行5次; JMeter将向baidu服务器发送总共5个用户请求。

按顺序,按以下顺序依次发送请求:HTTP请求 – > FTP请求 – > JDBC请求,对于每个循环按随机顺序,请求随机发送,FTP请求 – > HTTP请求 – > JDBC请求 或 JDBC请求 – > FTP请求 – > HTTP请求等

4、配置元件(Config element)

比如CVS Data Set Config,它可以帮助我们从文件中读取测试数据。另外Jmeter也提供了众多的函数来帮我们生成动态数据。

缓存管理器),自动记录服务器返回的Cache信息。简单说就是它为取样器提供预备数据,然后由取样器

发出请求。

入不同的登录凭据。 该登录信息(例如,用户名,密码)可以存储在文本文件中。 JMeter有一个元素,允许您从该文本文件中读取不同的参数。 它是“CSV数据集配置”,用于从文件中读取行,并将它们拆分为变量。

这是CSV数据的示例。 这是一个文本文件,其中包含用于登录目标网站的用户和密码

密码将作为cookie存储在计算机中。下次访问 www.baidu.com 时 ,无需再次登录,因为在浏览器将使用您的Cookie作为用户数据登录。

Cookie管理器会自动存储该cookie,并将其用于将来对该特定网站的所有请求。

此元素允许您设置HTTP请求控制器使用的默认值

server name = google.com

PS:在执行顺序方面有个例外,配置元件”用户定义的变量”无论它处于测试树的哪个位置,总是在测试的初始阶段执行。所以个人建议把它放在线程组的开始部分。

5、定时器(Timer)(

固定定时器:思考时间

JMeter向

每个用户请求之间的延迟为5000毫秒

6、前置处理器(Per processors)

7、取样器(Samples)

您将FTP“下载文件”或“上载文件”请求发送到FTP服务器。

JMeter将FTP命令发送到FTP服务器ftp.example.com ,然后从该服务器下载文件Test.txt。

您可以配置JMeter将SQL查询发送到此服务器以检索数据。

如果要测试邮件服务器,可以使用TP采样器。 此采样器用于使用TP协议发送电子邮件

8、后置处理器(post processors)

9、断言(Assertions)

用过LR的读者应该会知道检查点这个功能,可以帮助我们来判断请求是否成功返回且是否符合要求,在Jmeter中我们不叫检查点,我们叫断言,接触过selenium的也会懂这个概念。就是用一个预设的结果(值、表达式、时间长短等条件)与实际结果匹配,匹配到则成功,反之失败。

APPly to:

适用范围

Main sample and sub-samples:作用于父节点取样器及对应子节点取样器

Main sample only:仅作用于父节点取样器

Sub-samples only:仅作用于子节点取样器

JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)

要测试的响应字段:

要检查的项

响应报文

Documeng(text):测试文件

URL样本

响应代码

响应信息

Response Headers:响应头部

Ignore status:忽略返回的响应报文状态码

模式匹配规则:

包括:返回结果包括你指定的内容

匹配:(好像跟Equals查不多,弄不明白有什么区别)

Equals:返回结果与你指定结果一致

Substring:返回结果是指定结果的字串

否:不进行匹配

要测试的模式:

即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理

10、监听器(Listener)

“图形结果”侦听器在图形上显示服务器响应时间

“查看结果树”以基本HTML格式显示用户请求的结果(View Results Tree)

通过察看结果树,我们可以看到每个请求的结果,其中红色的是出错的请求,绿色的为通过。

Thread Name:线程组名称

Sample Start: 启动开始时间

Load time:加载时长

Latency:等待时长

Size in bytes:发送的数据总大小

Headers size in bytes:发送数据的其余部分大小

Sample Count:发送统计

Error Count:交互错误统计

Response code:返回码

Response message:返回信息

Response headers:返回的头部信息

这里绿色的就说明请求是通过的,返回值是200,如果出现红色的 就说明请求失败,这时候可以通过右边的取样器结果和响应数据来查看结果。

用表格可看结果(View Results in Table)

四、组件执行顺序

在同一作用域名范围内(不考虑逻辑控制器),测试计划中的元件按照如下顺序执行。

(1)配置元件(config elements )

(2)前置处理程序(Per-processors)

(3)定时器(timers )

(4)取样器(Sampler)

(5)后置处理程序(Post-processors) (除非Sampler 得到的返回结果为空)

(6)断言(Assertions)(除非Sampler 得到的返回结果为空)

(7)监听器(Listeners)(除非Sampler 得到的返回结果为空)

问题

1、为什么要使用jmeter?他可以帮我们解决那些事情?

  jmeter主要是做接口测试和性能测试,它支持的协议也不少,用来测试http,数据库并发都是很方便快捷的工具,相对于lr来说更灵活与实用,等等

2、我们在什么时候会使用jmeter?

  · 在一个项目中我们可能前段还没有开发完毕我们想看一下服务器的相应数据。

  · 比如我们校验数据库有没有做校验,我们可以绕过前端

  · 我们想看一下这个接口或者多个接口的并发量是多少,性能怎么样

3、.谁在使用?为什么是他在使用?

  一般使用者为开发人员或者测试人员。

  开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件

  支持接口测试,压力测试等多种功能,支持录制回放,入门简单

  相较于自己编写框架活其他开源工具,有较为完善的UI界面,便于接口调试

  多平台支持,可在Linux,Windows,Mac上运行

4、使用jmeter需要了解什么?接口与接口之间的联系怎么处理?

  · 我们必须了解接口的工作原理

  · 需要掌握http中的get和post请求原理

  · 需要掌握请求头,响应头,请求体个个字段代表什么意思,并且字段的返回值的各代的含义是什么?

  · 响应的状态码各代表什么含义·

  · json是什么?

  · 接口测试用例的设计方法,以及测试时点

  接口之间的联系:

  接口与接口之间存在联系,比如上个接口的返回值是下一个接口的入参,那我们就要在上个接口返回值赋值变量,供下一个接口调用。

5、在使用jmeter中我想要的预期结果和实际结果是怎样对比的?

  · 我们做所有的测试无非就是预期结果和实际结果作对比,如果预期结果和实际结果作对比,那么这个接口就是可用的,不相等那么这个接口就是有问题的。

  ·在jmeter中我们的用断言做实际结果和预期结果的对比,它提供了许多断言方法,其中最常用的就是响应断言,在后面我会专门的写一下响应断言以及一些常用断言的用法。

  · 我们还需要知道在jmeter中我们断言的内容是啥?这点是很重要的

7、使用jmeter的是的我们的有哪些方面的提升,jmeter的主流方向是什么?

  · 对整个前端与后端的一个相互传输数据原理有了进一步了解

  · 可以提高测试效率,可以提早的参与进来,较早的发现问题,减少开发成本,缩短整个产品的上线周期,可以给测试流出充裕的时间,保证产品质量。

  ·掌握了接口测试的测试点,已及用例的设计方法。

  jmeter测试的主流方向:

  · 用于性能测试,压力测试

  · 接口测试

关于linux下运行jmeter的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux环境下使用JMeter进行压力测试 (linux下运行jmeter)