竹竹云

导航

Jmeter压测过程中遇到问题(1)

1.      内存溢出
jmeter是一个java开发的开源性能测试工具,在性能测试中可支持模拟并发压测,但有时候当模拟并发请求较大或者脚本运行时间较长时,压力机会出现卡顿甚至报异常————内存溢出,
这里就介绍下如何解决内存溢出及相关的知识点。。。
首先来看看我们常说的内存泄漏、内存溢出是什么?
内存泄露是指你的应用使用资源之后没有及时释放,导致应用内存中持有了不需要的资源,这是一种状态描述;
内存溢出是指你应用的内存已经不能满足正常使用了,堆栈已经达到系统设置的最大值,进而导致崩溃,这事一种结果描述;
通常都是由于内存泄露导致堆栈内存不断增大,从而引发内存溢出。
在利用jmeter测试过程中,如果内存溢出的话,一般会出现这个提示:java.lang.OutOfMemoryError: Java heap space:意思就是堆内存溢出,不够用了。
说到堆栈内存,顺带简单介绍下堆栈的相关知识
内存溢出解决方法:调整堆内存大小
步骤:
1、打开jmeter安装文件(可以用notepad++打开),bin目录下的jmeter.bat文件:
 
2、找到set HEAP开头的内容,根据具体需要修改堆(heap)值大小,以及NEW分配的内存值大小:
 
这里默认值为:
set HEAP=-Xms512m -Xmx512m
set NEW=-XX:NewSize=256m -XX:MaxNewSize=256m
将其修改为:
set HEAP=-Xms512m -Xmx4096m
set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m
注意:一般而言,堆的最大值不要超过物理内存的一半,否则容易导致jmeter运行变慢、卡顿甚至内存溢出(因为java本身的垃圾回收机制是动态分配内存,
调整时候其本身会占用很多内存),NEW分配的内存,不宜太大!
3、修改完成后,关闭文件,重启jmeter既可以:
PS:当需要模拟的线程数较大时,就需要根据具体情况采用分布式压测的方式了,这种修改堆大小的方法只适用一部分情况,并不是万能的!
2.      slave启动jmeter-server.bat,提示“Could notfind ApacheJmeter_core.jar”
原因:程序找到jmeter下的文件,是因为没有配置JMETER_HOME
解决方法:
(1)高级系统配置->环境变量,新建系统变量:JMETER_HOME等于你jmeter保存的根目录
(2)系统环境变量path中增加%JMETER_HOME%\bin。
然后重启jmeter-server.bat。jmeter环境是基于Java环境已配置。
3.   客户机可以正常ping通,但是不支持master访问,jmeter_server.bat也正常启动。
原因:客户机的防火墙没有关闭。最好两边防火墙都关闭。(加入公司域,处于安全考虑,个人无法关闭防火墙,需要找网络安全部)
5.启动jmeter-server.bat时抛出了如下异常 (用过-是可以的) 
  1. Server failed to start: java.rmi.server.ExportException: Listen failed on port:
  2.  
    0; nested exception is:
  3.  
            java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
  4.  
     
  5.  
    An error occurred: Listen failed on port: 0; nested exception is:
  6.  
            java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
  7.  
    errorlevel=1
    问题分析
1.可能监听的端口被占用,修改端口号
2.Server相关的rmi配置需要调整
解决方案 -(用过是可以的)
在目录\apache-jmeter-5.0\bin下,用Notepad++编辑器打开名为jmeter.properties的文件
找到server.rmi.ssl.disable=false,改为true,并把前面的#去掉
保存配置调整,重新启动jmeter-server.bat即可恢复正常。
这个最好在做分布式的时候,控制机和代理机的jmeter.properties文件这个地方一并修改,不修改还是会报错。
6.jmeter-server.bat 启动报:WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002.
 尝试使用 :以管理员身份启动。
7. 分布式下测试master机器没有返回结果
slave机器服务终端显示,但是一个非常简单的脚本,执行超级慢,感觉不应该:
Starting the test on host 192.168.5.158:1099 @ Fri Aug 17 14:00:44 GMT+08:00 2018 (1534485644989)
Finished the test on host 192.168.5.158:1099 @ Fri Aug 17 14:05:18 GMT+08:00 2018 (1534485918786)
master机器没有返回结果。
解决:
1.怀疑jmeter环境变量配置,反复查看没有问题
2、怀疑jmeter.properties文件修改错误,反复查了master、slave机器的配置文件,没有问题
3、将问题转向机器IP,查看master机器IP,slave机器IP,都用的固定IP,没有问题
4、重新启动master机器的jmeter-server.bat,发现了和slave机器异样的地方,master机器显示的endpoint:IP是Vmware network Adapter vmnet1(安装VMWare的虚拟IP),jmeter-server启动的时候自动识别了虚拟机IP,没有识别本地网络IP
5、将网络适配器中的虚拟适配器禁用掉,重新启动jmeter-server.bat,endpoint变成了本地IP,再次尝试远程执行,成功,复杂的脚本执行也很快。
最终发现问题出现在第四个上:(我按照第4,5个方式做了,但是最后又有了问题,下面是我的试验情况,以及这样会产生什么问题)
jmeter-server.bat启动时的ip是虚拟机的ip。可以在本地开启虚拟机,在本事使用 ipconfig查一下:
 
 
 
上面本机Jmeter-server.bat;启动显示的ip地址。本机jmeter.properties里设置的remote_hosts的ip址要与Jmeter-server.bat启动显示的ip地址一样。不要按照上面那样去禁用网络设配器的虚拟机适配器。如果禁用了网络设配器的虚拟机适配器,本机Jmeter-server.bat启动时它就会用无线网络的ip地址,那样你再把jmeter.properties里的remote_hosts,设置为无线网络的ip地址,那样agent(虚拟机中代理机)机就会响应请求、数据,而界面也会弹出错误,如下图:
禁用网络设配器的虚拟机适配器,再配置本地jmeter.properties里的remote_hosts为无线网络的ip地址的后果:
那样你在本机用:telnet  192.168.61.128(虚拟机ip) 1099;
发现连接不上;
而当你把禁用的网络设配器的虚拟机适配器启动;再把本地jmeter.properties里的remote_hosts设置为本地meter-server.bat启动时的ip,就会发现:telnet  192.168.61.128(虚拟机ip) 1099 成功。这是自身实践的结果,因为禁用了网络设配器的虚拟机适配器,而去用无线网络的ip导致一直报上图 refused  to host错误,再在去网络上找解决这个错误的方法,试了老半天没成功,最终还是启用禁用网络设配器的虚拟机适配器,使用虚拟机的ip才成功。这个是我自身的这错误的原因,希望大家对大家有借鉴作用。
补充:如果你在虚拟机发现telnet 169.254.202.187(本机中ipconfig出来虚拟机ip) 1099连接不同,可以对这个虚拟机适配器进行关闭,使用另外的ip尝试(一般总有一个能够连接上)
8、Jmeter分布式运行时报该错误时(用过):Error in NonGUIDriver java.lang.RuntimeException:Following remote engines could not be configured/或者 Error in NonGUIDriver java.lang.RuntimeException: Could not find the  configured时 
在做了个负载测试跑半个小时候,再次编辑线程数保存,重新启动分布式运行时报如下错误:
 
 
解决方法: 重启一下拒绝连接的那台执行机,然后再重新启动jmeter server.bat,即可。(用过-可以)
9、jmeter分布式报错,Error in rconfigure() method java.rmi.ConnectException: Connection refused to ho st
slave机器:Linux(4台)
准备压力机过程中,为方便省事,只配置了一台,其余3台是从这一台克隆过来的
执行分布式压测,返回如下error:
Error in rconfigure() method java.rmi.ConnectException: Connection refused to ho
st: 192.168.0.105; nested exception is:
java.net.ConnectException: Connection refused: connect
查看jmeter-server启动命令,发现slave机器使用的ip是克隆源ip
 
解决方法:slave机器上,bin目录下修改jmeter-server,改为slave机器ip(用过)
 
11、刚跑完负载测试时,改变线程数再次跑分布式运行时,会报如下错误:
 
解决方法:将执行机与控制机的jmeter server.bat关闭重启即可,因跑完负载测试时,jmeter server.bat运行只有开始没有结束
 

posted on 2022-11-01 10:27  竹竹云  阅读(837)  评论(0编辑  收藏  举报