Abhiram
Abhiram

Reputation: 75

Running multiple jmeter-server on same host

I want to run JMeter in distributed manner. My requirement is such that there should be multiple jmeter-server processes running on my slave machines. In order to do so I ran below commands.

./jmeter-server -Djava.rmi.server.hostname=XX.XX.X.XXX -Dserver.rmi.localport=60001

./jmeter-server -Djava.rmi.server.hostname=XX.XX.X.XXX -Dserver.rmi.localport=60001

Each time I run this command I see below messages on the console. Same error is for port 60002

Created remote object: UnicastServerRef2 [liveRef: [endpoint:[XX.XX.X.XXX:60001](local),objID:[-823e97d:171c37a0bf7:-7fff, -7549432026360676360]]]


Created remote object: UnicastServerRef2 [liveRef: [endpoint:[XX.XX.X.XXX:60002](local),objID:[7b7158d6:171c37bd76f:-7fff, 2942891814894680180]]]

On the master, the remote server are configured as XX.XX.X.XXX:60001 and XX.XX.X.XXX:60002. But each time I run the test I get below error.

2020-04-29 01:26:03,052 ERROR o.a.j.e.DistributedRunner: Failed to create engine at XX.XX.X.XXX:60001
java.rmi.NoSuchObjectException: no such object in table
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:283) ~[?:1.8.0_212]
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:260) ~[?:1.8.0_212]
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:375) ~[?:1.8.0_212]
    at sun.rmi.registry.RegistryImpl_Stub.lookup(RegistryImpl_Stub.java:119) ~[?:1.8.0_212]
    at org.apache.jmeter.engine.ClientJMeterEngine.getEngine(ClientJMeterEngine.java:70) ~[ApacheJMeter_core.jar:4.0 r1823414]
    at org.apache.jmeter.engine.ClientJMeterEngine.<init>(ClientJMeterEngine.java:83) ~[ApacheJMeter_core.jar:4.0 r1823414]
    at org.apache.jmeter.engine.DistributedRunner.createEngine(DistributedRunner.java:237) ~[ApacheJMeter_core.jar:4.0 r1823414]
    at org.apache.jmeter.engine.DistributedRunner.getClientEngine(DistributedRunner.java:213) [ApacheJMeter_core.jar:4.0 r1823414]
    at org.apache.jmeter.engine.DistributedRunner.init(DistributedRunner.java:93) [ApacheJMeter_core.jar:4.0 r1823414]
    at org.apache.jmeter.JMeter.runNonGui(JMeter.java:1011) [ApacheJMeter_core.jar:4.0 r1823414]
    at org.apache.jmeter.JMeter.startNonGui(JMeter.java:915) [ApacheJMeter_core.jar:4.0 r1823414]
    at org.apache.jmeter.JMeter.start(JMeter.java:543) [ApacheJMeter_core.jar:4.0 r1823414]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_212]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_212]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_212]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_212]
    at org.apache.jmeter.NewDriver.main(NewDriver.java:245) [ApacheJMeter.jar:4.0 r1823414]
2020-04-29 01:26:03,056 ERROR o.a.j.u.JMeterUtils: no such object in table
2020-04-29 01:26:03,056 INFO o.a.j.e.DistributedRunner: Failed to configure XX.XX.X.XXX:60001
2020-04-29 01:26:03,056 INFO o.a.j.e.DistributedRunner: Stopping remote engines
2020-04-29 01:26:03,056 INFO o.a.j.e.DistributedRunner: Remote engines have been stopped
2020-04-29 01:26:03,056 ERROR o.a.j.JMeter: Error in NonGUIDriver
java.lang.RuntimeException: Following remote engines could not be configured:[XX.XX.X.XXX:60001]
    at org.apache.jmeter.engine.DistributedRunner.init(DistributedRunner.java:112) ~[ApacheJMeter_core.jar:4.0 r1823414]
    at org.apache.jmeter.JMeter.runNonGui(JMeter.java:1011) [ApacheJMeter_core.jar:4.0 r1823414]
    at org.apache.jmeter.JMeter.startNonGui(JMeter.java:915) [ApacheJMeter_core.jar:4.0 r1823414]
    at org.apache.jmeter.JMeter.start(JMeter.java:543) [ApacheJMeter_core.jar:4.0 r1823414]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_212]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_212]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_212]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_212]
    at org.apache.jmeter.NewDriver.main(NewDriver.java:245) [ApacheJMeter.jar:4.0 r1823414]

I have checked and port 1099, 60001 and 60002 are open for all TCP as well as UDP traffic.

Can someone please help?

Upvotes: 3

Views: 2219

Answers (2)

Dmitri T
Dmitri T

Reputation: 168122

  1. You're using wrong property, you need to amend server.rmi.port
  2. You need to use different ports for different client engines, to wit:

    • start slave 1:

      jmeter-server -Djava.rmi.server.hostname=127.0.0.1 -Dserver.rmi.port=60001
      
    • start slave 2:

      jmeter-server -Djava.rmi.server.hostname=127.0.0.1 -Dserver.rmi.port=60002
      
    • start master:

      jmeter -Jremote_hosts=127.0.0.1:60001,127.0.0.1:60002 -r -n -t test.jmx -l result.jtl
      

    replace 127.0.0.1 with the IP address of your machine where you have slave instances (if it's different from the master)

  3. Your "requirement" doesn't make sense at all as having 2 JMeter slave instances on the same machine is worse in terms of performance than having 1 instance

  4. According to JMeter best practices you should be using the latest version of JMeter so consider upgrading to JMeter 5.2.1

More information:

Upvotes: 0

UBIK LOAD PACK
UBIK LOAD PACK

Reputation: 34546

Run servers this way:

jmeter -Dserver_port=60001 -s -j jmeter-server1.log -Djava.rmi.server.hostname=XX.XX.X.XXX


jmeter -Dserver_port=60002 -s -j jmeter-server1.log -Djava.rmi.server.hostname=XX.XX.X.XXX

Then controller this way:

jmeter -R -Jremote_hosts=XX.XX.X.XXX:60001,XX.XX.X.XXX:60002 -n -t Testplan.jmx -l results.csv -e -o reportfolder

Read this tutorial for more details.

If you're looking to learn jmeter correctly, this book will help you.

Upvotes: 2

Related Questions