性能测试之JMeter远程模式
使用不同的端口号
默认情况下,JMeter使用标准RMI的端口 1099 。是可以改变的。为了达到这个目的,下面所有的都是执行:
· 在服务器上,使用新的端口号来启动 rmiregistry
· 在服务器上,使用服务器定义的端口号来启动 JMeter
· 在客户端上,更新 remote_hosts 属性包括新的 host:port 设置
自JMeter2.1.1版本后,JMeter服务端脚本提供支持变更端口。比如,假设你想使用 1664 ( 1099 已被占用)
在Windows电脑中(命令行)
C:JMETER>SETSERVER_PORT=1664
C:JMETER> JMETER-SERVER [other options]
在Unix电脑中
$SERVER_PORT=1664jmeter-server [otheroptions]
[环境变量使用大写字母]
在上面两种情况下,在特殊的端口使用脚本启动 rmiregistry ,接着通过已经定义的 server_port 属性在服务端启动JMeter。
可选端口号将会被输出在服务器的 jmeter.log 文件中( rmiregistry 不会创建日志文件)。
使用不同的测试样例
在测试计划中,监听器发送他们的结果至默认的JMeter客户端。通过情况下,样例结果将会在生成的时候同时返回。这个将会影响服务器的大吞吐量;样例结果在线程继续时必须返回所有的结果。有一些JMeter属性可以改变这个功能。
mode
样例发送模式-在2.9版本默认采用是 StrippedBatch。这个将会被发送至客户端结点。
· Standard : 在生成样例后即发送结果
· Hold : 保存样例至数组中直到运行结束。这个将会使用大量的内存在服务器端,不推荐使用。
· DiskStore : 存储样例在磁盘文件中( java.io.temp 文件夹下)直到运行结束。JVM退出时,这个文件将会被删除。
· StrippedDiskStore : 从返回数据中删除成功的数据,并使用 DiskStore 发送
· Batch : 发送保存的样例当数量( num_sample_threshold )或时间( time_threshold )达到一个阀值,在这个阀点时将同步发送样例。这个值可以在服务器的下列属性中配制:
· num_sample_threshold : 样例累积数,默认 100
· time_threshold : 时间值,默认是 60000毫秒 = 60秒
异步模式的使用,在下面。
· Statistical : 发送概要样例当数量或时间达到阀值。样例将被归整通过线程组名和样例标签。下面是可以归整的属性:
elapsed time
latency
bytes
sample count
error count
· Stripped : 从返回数据中删除成功的样例
· StrippedBatch : 从返回数据中删除成功的样例,并使用 Batch 发送
· Asynch : 样例被临时存储在本地队列中。一个单独的工作线程发送样例。这样不需要测试线程等待结果发送至客户端。然而,如果线程的创建速度比发送速度快,消息队列将会终被填满,样例线程会被堵塞直到样例被从队列中清理完全。这个模式比较适用于平滑的样例测试。消息队列的大小可以在服务器端调节通过JMeter的属性 asynch.batch.queue.size (默认 100 )。
· StrippedAsynch : 从返回数据中删除成功的样例,并使用 Asynch 发送
· Custom implementation : 配制模式参数至你的自定义样例类名中。这个必须继承接口 SampleSender 并且有一个独立参数类型为 RemoteSampleListener 的构造方法。
Stripped`模式会包括`responseData`流,因此一些元素前置`responseData`将能正常工作。
这不是真正的问题,将会有更有效的方法来增加这个特性。
下面的属性应用于 Batch 和 Statistical 模式:
num_sample_threshold设置的样例数(默认为 100 )
time_threshold设置时间值(默认 60秒 )
处理节点启动失败
针对大数量级的测试,有一种情况是部分远程服务会不可用或无法启动。比如,当你使用自动化脚本来定位大量的云机器并使用作为并发机器,一些请求机器也许会失败因为一些云的问题。自JMeter2.13后,有一些新的属性来控制这种行为。
首先,你应该尝试重试初始化在那些仅是因为延时启动。为了确保重试,你应该设置 client.tries 属性来设置总的尝试次数。默认情况下仅会尝试一次。为了控制重试延迟,设置 client.retries_delay 属性来控制在等待尝试的时间间隔(毫秒)。
后,你应该继续运行使用这些并发机器测试,并成功初始化且跳过失败的节点。为了使这个可用,设置 client.continue_on_fail=true 属性。