Jmeter在高并发测试中卡顿?内存溢出咋解决?教你几招

检测维修 0 169

当前,众多从业者于压力检测环节倾向于选用Jmeter,缘于该软件具备开放源代码特性,体量不大,并且能够进行定制化编程。然而事物总有正反两面,优劣并存,拿商业软件Loadrunner和Jmeter来说,在应对高并发,尤其是大型项目的高并发,或者脚本执行耗费时间较长的情况下,进行压力测试时,系统可能会发生严重阻塞,甚至抛出异常——比如内存耗尽,导致整个测试环境几乎完全停摆。这种情况让不少人感到非常头疼,那么如何才能缓解这种困境呢,下面我就为大家介绍几种应对方法!

要有效解决健康问题,必须找出病因,我们首先要弄清楚通常所说的内存溢出和内存泄漏究竟指什么,它们是如何形成的。

内存占用失控是指软件在获取存储区域后,不能归还这部分存储区域,单次占用失控问题不大,但占用失控累积起来影响恶劣,不论存储区域有多大,最终总会被完全消耗干净。

内存不够用的情况,是程序在请求内存时,发现没有足够的空间可供分配,导致出现内存不足的问题;举例来说,比如申请了一个整型变量,却要存储一个需要长整型才能容纳的数值,这就构成了内存溢出。

内存占用后未及时释放,会导致资源无法回收,造成系统资源紧张,影响其他程序运行。申请的内存空间如果未被正确归还,使用者将失去对该内存的访问权限,同时该内存也无法被系统重新分配。如同一个容器容量有限,强行装入过多物品会导致物品散落,无法使用,这就是资源耗尽的情况。比如栈,当栈已满时再尝试添加元素,一定会发生空间溢出,这种情况称为上溢,而当栈为空时再尝试移除元素,同样会导致空间溢出,这种情况称为下溢,根本原因是分配的内存容量不够,无法容纳全部数据项序列,这种情况被称为内存溢出。

一般情况是因为内存泄漏造成堆栈内存持续膨胀,进而产生内存溢出现象。

当运用jmeter进行检测操作时,一旦发生内存耗尽状况,通常会显现出以下讯息:

Java运行时发生内存不足错误,表明内存块已满,无法继续分配空间,具体表现为堆内存空间耗尽的情况。

说到堆栈内存,顺带简单介绍下堆栈的相关知识:

内存溢出解决方法:调整堆内存大小

步骤:

内存溢出情况发生时,线程无法被终止,许多使用者感到十分焦躁,此刻应当启动任务管理界面,审视运行占用CPU资源最多的程序,然后选择将其关闭。

启动jmeter安装包,借助notepad++或editplus进行查看,bin文件夹中的jmeter.bat文件

Jmeter内存溢出解决方法_内存溢出检测工具_Jmeter内存泄漏原因分析

定位以set HEAP开头的段落,依据实际情形调整堆区容量,同时设定NEW所分配的存储空间数值:

这里默认值为:

设置堆内存初始值为1g, 最大值为1g, 元空间最大值设定为256m

将其修改为:

设置堆内存的容量为512兆,最大可扩展至8192兆

设置参数 NEW 为 -XX:NewSize=256m, 以及 -XX:MaxNewSize=512m, 用来调整堆内存区域里新生代的大小

JDK32位计算机的Xmx参数值不应超出1500m,其上限为1378m,否则在执行Jmeter程序时会出现错误提示。

如何查看本机JDK的位数?

CMD下执行 java -version

通常情况下,这个数值并非越高越佳,需要依据实际测试的设备来决定,堆内存的上限不应超过物理内存的一半,否则可能会造成jmeter执行迟缓、卡顿,甚至引发内存溢出状况(由于java的垃圾回收机制会动态分配内存,在调整过程中本身就会消耗较多内存),新创建的内存不宜设置过大,满足需求即可!

3、修改完成后,关闭文件,重启jmeter既可以:

当模拟线程数量非常多时,必须针对具体状况选择分布式压力测试,这种调整内存空间的做法仅适用于部分情形,并非通用方案,此外,倘若

在处理大型项目的高并发情况时,我们更倾向于采用Jmeter的非图形用户界面,这种方式能够确保整个操作过程更加流畅顺畅,或许部分人对于命令行的交互方式不太熟悉,但万事开头总是困难的,一旦适应了这种操作模式,你会发现它更加高效,而且这也将有助于提升你的专业水准。执行JMeter测试时,需要关闭“查看响应记录”和“汇总报告”这类监听模块,它们会大量占用系统资源。

相关推荐: