Unable to connect to remote machine in jmeter - jmeter

I am trying to launch my jmeter tests in a remote machine as i will be running bulk users on a .jmx file (Approx 200 000 threads). I have a remote machine where i have downloaded jmeter and saved the folder in desktop. and in command prompt i have a command
Desktop\apache-jmeter-4.0\bin>jmeter-server -n
Could not find ApacheJmeter_core.jar ...
... Trying JMETER_HOME=..
Found ApacheJMeter_core.jar
Created remote object: <Have a message saying the server is up and running>
Now in jenkins i have a command
export JAVA_HOME=/java/1.8.0.65
bin//jmeter -n -R <Remote HOst IP> -t file.jmx -l result.jtl -e -o/resultfolder
When i trigger the job in jenkins i am getting
Configuring remote engine: <Remote machine IP>
Exception creating connection to: <Remote machine IP>; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
Failed to configure <Remote machine IP>
Stopping remote engines
Remote engines have been stopped
Error in NonGUIDriver java.lang.RuntimeException: Following remote engines could not be configured:<Remote machine IP>
I have a rmi keystore file created in remote machine.

You need to launch create-rmi-keystore.sh script on all machines and make sure that the configuration is the same, this way communication between JMeter master and slaves will be secure.
More information: Remote Testing: Setting Up SSL
If you don't want the communication between the master and slaves to be secure - you can amend the command line to:
jmeter -Jserver.rmi.ssl.disable=true -n -R <Remote HOst IP> -t file.jmx -l result.jtl -e -o/resultfolder
or add the next line to user.properties file on all hosts to make the change permanent:
server.rmi.ssl.disable=true
JMeter restart will be required to pick the property up. See Configuring JMeter user manual chapter for more information.
Depending on your test nature 1 slave might be not enough to simulate 200k threads so make sure you're following recommendations from the 9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure article and keeping an eye on JMeter engines health using built-in OS tools or JMeter PerfMon Plugin as if JMeter will not be able to send requests fast enough - you will get lower throughput/higher response times even if your application is not overloaded.

Related

JMeter - Remote Testing on Linux

I am executing JMeter remote testing with 1 master machine (192.168.0.1) and with 7 slave machines with 3 VMs (192.168.0.2 to 192.168.0.4) on a network interface and 4 other VMs (192.168.0.5 to 192.168.0.8) are in a different network interface.
My JMeter script is located at Master machine - 192.168.0.1
I tried to execute my test with the following command
./jmeter -n -t /home/lup01/Document/LuP2021/ITonICE_Lasttest_InfluxDebug_09032021.jmx -l /home/lup01/Document/LuP2021/LuP2021_LastTest_001_14-10-2021_7VMs.jtl -R 192.168.100.2,192.168.100.3,192.168.100.4 -Djava.rmi.server.hostname=192.168.100.6,192.168.100.7,192.168.100.8,192.168.100.9
However, the test never started. the screen just hung and after 15 minutes i had to stop the test. I did the sample run only with 3 threads.
On course of debugging, i also checked that, when i executed the test with
./jmeter -n -t /home/lup01/Document/LuP2021/ITonICE_Lasttest_InfluxDebug_09032021.jmx -l /home/lup01/Document/LuP2021/LuP2021_LastTest_001_14-10-2021_7VMs.jtl -R 192.168.100.2,192.168.100.3,192.168.100.4
the test was running fine with 3 VMs which are on the same interface as the master machine
However, when i executed the 2nd part
./jmeter -n -t /home/lup01/Dokumente/LuP2021/ITonICE_Lasttest_InfluxDebug_09032021.jmx -l /home/lup01/Dokumente/LuP2021/LuP2021_LastTest_001_14-10-2021_7VMs.jtl -Djava.rmi.server.hostname=192.168.100.6,192.168.100.7,192.168.100.8,192.168.100.9
the test got executed but the load was generated only on the master machine (192.168.0.1). i validated this by printing the host name in the result file.
Can someone please guide me what changes i need to do to get the test running successfully and the load being generated at the slave machines 192.168.100.6 to 192.168.100.9?
JMeter Master machine doesn't generate any load, it only reads .jmx script, transfers it to slaves and collects results.
It doesn't make sense to run more than 1 JMeter process on 1 machine, it doesn't provide any benefit and just consumes resources, if you have only one machine - run a single JMeter process, just make sure to follow JMeter Best Practices and properly tune this JMeter instance for high throughput testing
If this is some form of an experiment and you have to run multiple JMeter processes on a single host and would like to bind different JMeter instances to different network interfaces - you can do it via "Advanced" tab of the HTTP Request sampler (or HTTP Request Defaults if you have more than one sampler) like it's described in Using IP Spoofing to Simulate Requests from Different IP Addresses with JMeter

How to create 8 instances with 500 users each using Non-GUI mode in Jmeter

I have a requirement to run 4000 users. I just wanted to run that using Non-GUI. How can we create 8 instances with 500 users each using Non-GUI mode in Jmeter. Suggest the possible scenario with an example.
Get 9 machines somewhere somehow
Install Java 8+ (it's the per-requisite to run JMeter 5.4)
Install JMeter onto all machines. If you plan to use JMeter Plugins make sure that all the plugins are installed on all machines
If your test depends on external files or libraries - make sure that all the libraries and/or files are copied to the JMeter Machines
If you plan to use secure communication between master and slaves follow Setting Up SSL JMeter Documentation chapter, if not - add the next line to user.properties files on all machines:
server.rmi.ssl.disable=true
Run jmeter-server on 8 machines which will be acting as slaves
Add the next line to user.properties on the master machine
remote_hosts=ip_address_of_slave1,ip_address_of_slave_2, etc.
Make sure that the machines are on the same subnet and there is no firewall blocking connections between them
Run your test as:
jmeter -r -n -t /path/to/your/test.jmx -l /path/to/results.jtl
When the test finishes analyze your results by using Listeners or generating HTML Reporting Dashboard
More information:
Remote Testing
How to Perform Distributed Testing in JMeter

What update is needed in jmeter.properties and jmeter-server files to create a JMeter Remote Load Test

I am using jmeter 5.4.1, and facing issue while setting up the whole environment for that.
I have firewall in between master and slave machines.
I can request for some ports to open but before that I want to know how to configure them?
What update is needed in jmeter.properties and jmeter-server files to create a JMeter Remote Load Test.
In jmeter.properties nothing, don't touch this file, perform all the configuration either in user.properties or via -J command-line arguments.
Coming back to your question, I believe the official documentation is quite comprehensive, however just in case you cannot or unwilling to read:
In the master:
remote_hosts=ip,addresses,or,dns,hostnames,of,slaves,separated,by,comma
client.rmi.localport=xxxx
In the slave(s):
client.rmi.localport=xxxx
server.rmi.localport=yyyy
If you don't want secure communication between master and slaves - add the next line to both as well:
server.rmi.ssl.disable=true
So in the firewall you need to open these xxxx and yyyy ports
More information:
Apache JMeter Distributed Testing Step-by-step
Remote hosts and RMI configuration
JMeter Distributed Testing with Docker

Jmeter Distributed Setup works in GUI but not the command line

I am running Windows 7 Pro with JMeter 4.0 r1823414 on all 5 machines with Java JDK 1.8.0_144 on all of them as well. All paths and ENV Vars are identical across all machines. I set my remote hosts in the master and I am able to see them on the GUI inside the master. I built the rmi_keystore.jks on a slave machine and copied it into the bin folder in every machine. I successfully started all the servers on the slave machines and see the successful attachment of the rmi (running the jmeter-server.bat):
Found ApacheJMeter_core.jar
Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook
Picked up _JAVA_OPTIONS: -Xbootclasspath/a:"C:\Program Files
(x86)\HP\Unified Functional Testing\bin\java_shared\classes\jasmine.jar"
Created remote object: UnicastServerRef2 [liveRef: [endpoint:
[<ip:port>,SSLRMIServerSocketFactory(host=<host_name/IP>,
keyStoreLocation=rmi_keystore.jks, type=JKS,
trustStoreLocation=rmi_keystore.jks, type=JKS, alias=rmi),
SSLRMIClientSocketFactory(keyStoreLocation=rmi_keystore.jks, type=JKS,
trustStoreLocation=rmi_keystore.jks, type=JKS, alias=rmi)](local),objID:
[<stuff>:-7fff, <more_stuff>]]]
Running a basic HTTP call I am able to run from the master to all 4 slave machines (individually and all at once) and get results without issue from the GUI. My problem is from the command line. I cannot get the test to run. I have tried:
jmeter -n -t distributed_test_4_slaves.jmx -r -l distributedLog_Test.jtl -Jserver.rmi.ssl.keystore.file=rmi_keystore.jks
jmeter -n -t distributed_test_4_slaves.jmx -r -l distributedLog_Test.jtl
jmeter -n -t distributed_test_4_slaves.jmx -R <all_my machine_names> -l distributedLog_Test.jtl (with and without -Jserver.rmi.ssl.keystore.file=rmi_keystore.jks)
jmeter -n -t distributed_test_4_slaves.jmx -R <all_my machine_names:ports> -l distributedLog_Test.jtl (with and without -Jserver.rmi.ssl.keystore.file=rmi_keystore.jks)
jmeter -n -t distributed_test_4_slaves.jmx -R <all_my machine_ips(with and without ports)> -l distributedLog_Test.jtl (with and without -Jserver.rmi.ssl.keystore.file=rmi_keystore.jks)
Every time I get the same errors in the command line:
Creating summariser <summary>
Created the tree successfully using distributed_test_4_slaves.jmx
#The next 5 lines repeat for each slave
Configuring remote engine: <slave_1..4>
Exception creating connection to: <slave_1..4>; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (The system cannot
find the file specified)
Failed to configure <slave_1..4>
Stopping remote engines
Remote engines have been stopped
Error in NonGUIDriver java.lang.RuntimeException: Following remote
engines could not be configured:[
<slave_1>, <slave_2>, <slave_3>, <slave_4>]
What am I missing? Why would it run and work in the GUI but not on the command line? Something cannot be right.
Make sure that
You either run JMeter from its "bin" folder
Or have rmi_keystore.jks in the folder where you're running JMeter from
as the error clearly states that JMeter tries to load rmi_keystore.jks file and fails
One more thing to try is providing full path to the rmi_keystore.jks file via server.rmi.ssl.keystore.file property.
You can also completely disable secure RMI communication by setting server.rmi.ssl.disable property to true
Normally jmeter.log file should contain the root cause of the issue, if it doesn't or not very informative - you can increase JMeter log verbosity for selected clas(ses) or package(s).

Unable to start Jmeter

unable to Jmeter in distribution load, getting below error please help am using jmter v3.0.20160606
Changing to JMeter home directory
Could not find ApacheJmetercore.jar
Trying JMETERHOME=
Found ApacheJMeter_core.jar
This is expected and normal, now you need to launch a JMeter Master like:
jmeter -R xxxxx -n -t test.jmx -l result.jtl
Replace xxxxx with IP address or hostname of the machine where you launched Slave node, you should see something like:
Starting the test on host xxxxx # current date and time
More information:
Remote Testing
How to Perform Distributed Testing in JMeter
JMeter Distributed Testing Step-by-step
The first of JMeter Best Practices is Always use latest version of JMeter so consider upgrading to JMeter 3.3 (current version) or whatever will be available at JMeter Downloads page on next available opportunity

Resources