1 Linux下jmeter性能测试
1.1 环境配置
1.1.1 环境准备
整个测试过程中,测试环境为Windows系统和linux系统两部分,Windows环境下调试和配置需要运行的jmeter脚本,在linux系统中开始性能测试过程。
Linux安装CentOS 7系统,并在系统中安装好java环境,此次测试中,配置的java为java 1.8.0_211。
1.1.2 测试软件准备
测试中准备apache-jmeter-5.0版本jmeter进行测试。
为保证脚本设置和脚本运行时没有差异,Windows和Linux环境使用同一个版本的jmeter,也避免测试过程中因测试工具版本不兼容,出现异常。
1.2 jmeter集群配置
1.2.1 单台jmeter设置
将jmeter包拷贝至linux指定位置并解压(tar –zxvf 压缩包名称),开始配置jmeter。
1.配置环境变量
打开/etc/profile,进入文件最后添加jmeter环境配置,如下图红色横线所示,路径为Jmeter包存放位置。(可进入jmeter的bin目录下,输入pwd命令查看对应位置)
配置完成后,保存此配置文件,执行命令source /etc/profile让配置生效。此时在输入命令:jmeter –v可查看对应的jmeter版本信息。
Jmeter要配环境变量,这样不用手动起server,如果不配置环境变量,每次启动时都需要进入到对应的bin目录下进行操作。
2. Jmeter内存调优
压测过程中jmeter报内存溢出(报错:java.lang.OutOfMemoryError:gc overhead limit exceeded),或在测试过程中因jmeter自身内存限制,影响测试结果,在测试前可调整jmeter内存。
查看bin目录下jmeter文件(此次使用的版本,内存设置在jmeter文件中,也有在jmeter.sh/jmeter.bat文件中),修改HEAP=-Xms512m -Xmx1024m对应数值。此处对应的参数意义为:
-Xms:初始值
-Xmx:最大值
-Xmn:最小值
Heap Size的设置不宜太小,也不宜太大。若设置太小程序的响应速度会变慢了,因为GC占用了更多的时间,而应用分配到的执行时间较少。太大也会造成空间的浪费,而且也会影响其他程序的正常运行,Heap Size 最大最好不要超过可用物理内存的80%。建议将-Xms和-Xmx选项设置为相同。
根据实际情况,在此次过程中将此数值设置为4096m。
1.2.2 Jmeter集群配置
Jmeter 支持分布式压测,将需要模拟的大量并发用户数分发到多台压力机,使 Jmeter 拥有更大的负载量,满足真实业务场景(高并发场景)。
Jmeter分布式配置主要分为master端修改和slave端修改。设置前请确认,master端和slave端要ping通。
先对slave端进行配置。
1.进入 jmeter.properties文件,查找并取消这段配置的注释 server.rmi.ssl.disable=false ,false改成true。
2.进入jmeter-server文件(也有版本在jmeter.properties文件中),查找 jmeter-server -Djava.rmi.server.hostname=xx.xx.xx.xx ,设置slave节点IP(即当前slave机ip),这里设置的IP也是启动slave上的jmeter服务的IP,如果启动时显示的信息与此不符,请确认是否是多网卡或设置虚拟IP的原因。
3. 当默认的1099端口被占用或需要修改对应端口值时,进入 jmeter.properties文件,查找server.rmi.localport和server_port,并取消注释,将值修改为1099,固定分布式启动监听端口。此次测试将端口都设置在了1099.
Slave端设置完成后,在master端添加已设置好的slave机IP和端口信息。
进入master机的jmeter.properties文件,查找修改remote_hosts=ip:port:改成要启动的Linux机的ip以及端口。
例如:
多个slave机之间,使用逗号分隔开。
设置完成后,可能会遇到打不开的权限问题,此时:chmod 777 filename ,更改文件权限,然后再重新就可以打开了
1.2.3 Jmeter集群启动
设置完slave机和master机,先在slave机启动服务。
执行:./jmeter-server -Djava.rmi.sever.hostname=IP(slave机IP)完成slave机启动。如下,启动10.30.20.71的Slave机,当出现以下提示信息时,slave机正常启动,等待master机的调用。
当slave机启动后,在master机执行语句:./bin/jmeter.sh -n -t ./xxxx.jmx -R 10.30.20.71 -l ./result/result.jtl -e -o ./report 即可调用此slave机。
当master机启动slave机进行测试时,在slave机下出现提示信息:
而master机出现信息和执行数据:
脚本运行完成时,master机同样出现tydying up…脚本执行完成,开始整理报告数据,出现…end of run报告整理完成。
在脚本执行完成时,slave出现下列提示信息:
Finishing the test on host 10.30.20.71 @ Mon Oct 19 18:26:23 CST 2020 (1603103183123)。
1.3 Jmeter脚本设置
此次设置,为满足测试要求,使用Stepping Thread Group插件进行设置。安装好此插件,并对此插件进行设置,每一项设置参数含义如下:
This group will start 100 threads:设置线程组启动的线程总数为100个;
First,wait for N seconds:启动第一个线程之前,需要等待N秒;
Then start N threads:设置最开始时启动N个线程;
Next,add 10 threads every 30 seconds,using ramp-up 5 seconds:每隔30秒,启动10个线程,10个线程在5秒内启动完成;
Then hold load for 60 seconds:启动的线程总数达到最大值之后,再持续运行60秒;
Finally,stop 5 threads every 1 seconds:每秒停止5个线程;
此插件按一般线程组一样进行接口和控制器设置,开始脚本调试和设置,设置后调整上述参数即可开始测试。
1.4 Jmeter测试
再运行脚本之前,检查文件路径,需要再jmeter下建立一个report和一个result路径,以便在测试过程中指定测试结果和测试报告存放地址。每次进行测试时,这两个路径下应该为空,否则不能正常进行测试。
将设置好的脚本,xxx.jmx文件,传到已配置的linux环境jmeter目录下,执行命令语句。
Jmeter官网用户手册介绍如下:
-h, –help -> prints usage information and exit
-n, –nongui -> run JMeter in nongui mode
-t, –testfile <argument> -> the jmeter test(.jmx) file to run
-l, –logfile <argument> -> the file to log samples to
-r, –runremote -> Start remote servers (as defined in remote_hosts)
-H, –proxyHost <argument> -> Set a proxy server for JMeter to use
-P, –proxyPort <argument> -> Set proxy server port for JMeter to use
具体的含义如下:
-h 帮助 -> 打印出有用的信息并退出;
-n 非 GUI 模式 -> 在非 GUI 模式下运行 Jmeter;
-t 测试文件 -> 要运行的 JMeter 测试脚本文件;
-l 日志文件 -> 记录结果的文件;
-r 远程执行 -> 在Jmter.properties文件中指定的所有远程服务器;
-H 代理主机 -> 设置 JMeter 使用的代理主机;
-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号;
根据实际情况选择,执行语句时使用的命令。
1.5 Jmeter报告查看
当测试完成之后,自动生成报告,报告指定在report路径下,测试结果保存在result路径下。此时将report整个打包(tar –cvf report.rar report),打包完成之后将打包文件传到windows环境中进行查看。