此文转自微信公众号:自动化性能测试html
JMeter常见问题及解决方法java
在使用代理服务器录制脚本的时候,可能会出现html结尾的请求录制不到的问题。这是由于浏览器为了提高访问速度,将这些请求获取到的html资源做为静态资源缓存在本地了,因此只要打开过一次主页,接下来每次打开主页时,都无需再发送这些请求。对于性能测试来讲,主页中这些html资源,是有必要反复进行压测的。所以录制脚本的时候,必须将这些请求录制下来。linux
解决方法:apache
只要每次录制前,清空浏览器缓存就能够了。windows
(建议使用抓包方式作脚本)浏览器
使用录制下来的测试脚本进行测试的时候,查看结果树,可能会出现响应数据中有乱码。缓存
解决方法:服务器
一、找到安装目录/bin下面的jmeter.properties配置文件,以下:微信
二、打开jmeter.properties配置文件,找到“sampleresult.default.encoding”这个配置项,将原来的默认值“ISO-8859-1”修改成“utf-8”便可,修改后的配置以下所示:网络
三、重启jmeter,从新执行测试。这时响应数据中就不会有乱码了。
设置HTTP请求,参数中的值显示为中文,但系统接受数据时,中文显示为乱码;在“查看结果树”中,查看HTTP请求,请求参数中的中文数据显示乱码。
解决方法:
在HTTP请求页面,Content encoding设置为utf-8便可。
执行测试的时候,可能会出现OutOfMemoryError这样的异常。JMeter是java实现的工具,内存是由java虚拟机JVM管理的。若是出现了内存溢出的问题,可能调整JVM内存相关的参数进行优化。
步骤以下:
一、在window下,找到jmeter.bat启动脚本;
二、编辑jmeter.bat脚本,找到下面这些配置项。
三、参数调整
能够调大堆内存的大小:
将默认的set HEAP=-Xms512m -Xmx512m,
改成:set HEAP=-Xms1024m –Xmx1024m
或者调大堆内存中新生代的大小:
将默认的set NEW=-XX:NewSize=128m-XX:MaxNewSize=128m,
改成:set NEW=-XX:NewSize=256m-XX:MaxNewSize=256m。
或者调大永久带的大小:
将默认的set PERM=-XX:PermSize=64m-XX:MaxPermSize=128m
改成:set PERM=-XX:PermSize=128m-XX:MaxPermSize=256m
调整后重启jmeter,执行测试,问题通常能获得解决。须要说明的是,参数的取值不能一律而论,也要根据你们电脑的硬件配置实际选取。
Jmeter压测过程当中,因为测试机配置有限,CPU、内存均可能是存在瓶颈。若是使用很大的并发进行测试时,就可能会感到程序比较卡,这时候就没法继续增长压力了。
解决方法:
搭建Jmeter分布式集群,远程启动测试。
步骤以下:
一、在分布式集群中,脚本编辑、控制的机器叫作“client”,实际运行Jmeter测试脚本,负责向被测服务器发请求的机器,称为“server”。网络要求
二、server和client须要网络互通。找几台机器做为 server,而后client和server相互ping彼此的ip地址,若是能ping通,说明网络是ok的。
和client同样,server能够是linux系统,也能够是windows系统。 client上安装的JMeter版本最好和client保持一致。
在本文演示中,做为client机器,ip是172.31.132.242。
做为server机器,ip是172.17.3.212。
三、演示中,由于server是linux系统的,咱们须要去官网下载linux系统对应的JMeter安装文件,解压便可。
进入安装目录:apache-JMeter-2.13/bin下,启动server端程序,执行:./JMeter-server (windows下启动JMeter-server.bat)
若是server机器有多个ip,启动的时候能够指定一个,如:
./JMeter-server-Djava.rmi.server.hostname=172.17.3.212
配置和启动client端安装目录的bin文件夹下,找到JMeter.properties文件,以下:
打开文件,并找到remote_hosts=127.0.0.1这一行,修改成server服务器的列表,以下所示,若是server有多个,那么多个机器地址之间使用英文逗号分隔:
其实,client本身能够同时做为一个server机器,向服务端发送请求(前提是client上也启动了JMeter-server程序),因此也能够把client的ip加上,添加本身只须要写127.0.0.1便可。本文的演示中,先不添加client本身,因此使用的是第一个配置。
若是client有多个ip,也能够在启动的时候指定一个。 若是是windows系统,能够修改jmeter.bat启动脚本,在如下的命令最后,加上以下的配置,写明client这台机器的ip地址便可。
修改完毕后保存,启动Jmeter,打开界面。
执行分布式测试
打开client端的JMeter界面,点击运行-远程启动,里面能看到配置好的server端的机器列表。
此时能够启动一个远程机器,也能够选择下面的“远程所有启动”,同时启动全部的server。点击后,client端会自动和server端的服务创建链接,下发测试脚本到server端; 等server端的测试所有结束后,会将测试结果汇总到client端,咱们在client端配置的监听器就能看到测试结果了。