【API性能】3、多机jmeter压力测试搭建

来源:互联网 发布:乐高淘宝旗舰店 编辑:程序博客网 时间:2024/05/19 11:50

一、前言

前面介绍的文章,其实也是单机模式的,对于单机压力,随着线程数的增加,客户机的加压就出现瓶颈。我们为了模拟多机的压力测试的场景,需要提供多机分布式的压力测试环境。抽空翻了翻Jmeter的官方网站,花了点时间搭了套环境,说一下我的理解。

二、Jmeter分布式环境

首先来张图,说一下JMeter的多机之间的关系


Master机就是控制器,Slaves是加压机,Target是目标系统。Master用来调度其他Slave的,本身不做打压处理,它的工作是将压测脚本分发到各个Slave上,远程控制Slaves进行工作,在测试完成后,将结果收集回来,存成文件。

需要注意的是:Master和Slave之间的通讯是双向发起的,首先Master会创建到Slave的连接,Slave在收到Master的连接请求后,会获得Master的IP地址,然后Slave再创建一个到Master的连接。因此,Jmeter要求Master到Slaves之间的网络是双向可达的。

刚开始的时候,我试图用工作的笔记本作为Master控制机房的加压机Slaves,就是因为加压机不能反向创建到Master的连接,报告错误如下:

2017/10/09 13:24:50 ERROR - jmeter.samplers.RemoteListenerWrapper: testStarted(host) java.rmi.ConnectException: Connection refused to host: 192.168.56.1; nested exception is: 
        java.net.ConnectException: Connection timed out
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:129)
        at org.apache.jmeter.samplers.RemoteSampleListenerImpl_Stub.testStarted(Unknown Source)
        at org.apache.jmeter.samplers.RemoteListenerWrapper.testStarted(RemoteListenerWrapper.java:85)
        at org.apache.jmeter.engine.StandardJMeterEngine.notifyTestListenersOfStart(StandardJMeterEngine.java:211)
        at org.apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.java:325)


无线局域网适配器 无线网络连接:
   连接特定的 DNS 后缀 . . . . . . . : xxxxxxidm.com
   IPv4 地址 . . . . . . . . . . . . : 172.27.46.18
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 172.27.46.254


以太网适配器 VirtualBox Host-Only Network:
   连接特定的 DNS 后缀 . . . . . . . :
   IPv4 地址 . . . . . . . . . . . . : 192.168.56.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0

这就是笔记本有个双网卡,Jmeter随机选择的是另外一块网卡,导致双方不可达,这时就需要在jmeter.bat中增加java.rmi.server.hostname

%JM_START% %JM_LAUNCH% %ARGS% %JVM_ARGS% -Djava.rmi.server.hostname=172.27.46.18 -jar "%JMETER_BIN%ApacheJMeter.jar" %JMETER_CMD_LINE_ARGS%


第二、KeepAlive的坑

在上了压力以后,观察nginx中的日志,发现有很多closed keepalive connection,


重新看了一下Jmeter的脚本,在Http请求中勾选了Use Keepalive,去掉日志问题消失。



原创粉丝点击