使用 JMeter 进行压力测试
二.关于JMeter
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
官网:http://jmeter.apache.org/download_jmeter.cgi
三.准备工作
*1.*因为JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境
2.解压下载的二进制包,进入bin目录,使用jmeter.bat启动程序
3启动之后会有两个窗口,一个cmd窗口,一个JMeter的 GUI
4.更改语言为中文
官方默认为我们提供了简体中文。通过 【Options】->【Choose Language】变更为简体中文
四.创建测试
1.创建线程组
在“测试计划”上右键 【添加】–>【Threads(Users)】–>【线程组】。
设置线程数和循环次数。我这里设置线程数为800,循环一次。
2配置元件
在我们刚刚创建的线程组上右键 【添加】–>【配置元件】–>【HTTP请求默认值】。
配置我们需要进行测试的程序协议、地址和端口
3.构造HTTP请求
在“线程组”右键 【添加-】->【samlper】–>【HTTP 请求】设置我们需要测试的API的请求路径和数据。我这里是用的json
4.添加HTTP请求头
在我们刚刚创建的线程组上右键 【添加】–>【配置元件】–>【HTTP信息头管理器】。
因为我要传输的数据为json,所以设置一个 Content-Type:application/json
5.添加断言
在我们刚刚创建的线程组上右键 【添加】–>【断言】–>【响应断言】。
根据响应的数据来判断请求是否正常。我在这里只判断的响应代码是否为200。还可以配置错误信息
6.添加察看结果树
在我们刚刚创建的线程组上右键 【添加】–>【监听器】–>【察看结果树】。
直接添加,然后点击运行按钮就可以看到结果了。
Java VisualVM
工具所在位置:windows下jdk安装路径内,如 C:\Program Files\Java\jdk1.8.0_20\bin\ jvisualvm.exe 双击执行;
可以结合压测一起分析,如果cg需要分析这时候引入mat;
mat
1下载mat工具
地址:https://www.eclipse.org/mat/downloads.php
注意,12及以上版本需要安装jdk11以上
解决方法:在MemoryAnalyzer.ini 中加入指定jdk的地址, (jdk不用安装直接下载 解压指定bin/javaw.exe就可)
-vm
D:/software/jdk-11.0.18_windows-x64_bin/jdk-11.0.18/bin/javaw.exe
2启动
下载后解压,点击MemoryAnalyzer.exe进行启动
3. 获取dump文件有两种方法
<1>通过配置JVM启动参数
# 当程序出现OutofMemory时,将会在相应的目录下生成一份dump文件,如果不指定选项HeapDumpPath则在当前目录下生成dump文件
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/dumps
<2>通过 jmap 工具生成可以生成任意Java进程的dump文件
# 先找到PID
ps -ef | grep java
# jmap 转存快照
jmap -dump:format=b,file=/opt/dump/test.dump 16048
#16048为进程的pid
4导入dump文件
5了解mat
6、定位大对象(方法一)
点击上图中Histogram,可显示出每个类产生的实例数量,以及所占用的内存大小;
Shallow Heap 和 Retained Heap分别表示对象自身不包含引用的大小和对象自身并包含引用的大小。默认的大小单位是 Bytes,可以在 Window - Preferences 菜单中设置单位,图中设置的是KB。
根据Shallow Heap 和 Retained Heap找出占用最大的对象(下图)
红框内就是我的包路径,这时已经大概知道是什么对象占用了,去项目中检查大概率能定位,我遇到的是一次性查出全部的数据,太多导致。
7、定位大对象(方法二)
点击第5步图中 Leak Suspects 后,MAT会自动分析生成一份报告,通过报告,也能判断出和上一步一样的结果