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
Related
Facing an issue while running justb4/jmeter with docker -- I am trying to run jmeter container with another container localhost:55001 in the windows system
I have two container
--one container with localhost:55001
--another container with justb4/jmeter
Now I am trying to run justb4/jmeter jmx file, which in my local
docker run -d -p 8081:88 --network="HSM" --mount type=bind,source="/D/D_Backup/Jmeter/apache-jmeter-5.2.1/bin",target="/opt/apache-jmeter-5.4.3/bin" justb4/jmeter -n -t bin/.jmx -l bin/NextGen_HSM_Run.jtl -e -o bin/h.html
Getting below error
1651205770221,39,GetConnectionStatus_1,Non HTTP response code: org.apache.http.conn.HttpHostConnectException,Non HTTP response message: Connect to localhost:55001 [localhost/127.0.0.1] failed: Connection refused (Connection refused),HSM.GetConnectionStatus.Thread 2-1,text,false,Test failed: code expected to contain /200/,2647,0,1,2,http://localhost:55001/GetConnectionStatus,0,0,39
But when I am running from JMeter all transactions are passing.
If you want to use justb4/jmeter for testing another application in another container you need to use not localhost in JMeter but the IP address of the container where the application is running.
So you need to obtain the IP of the "other" container with something running on port 55001 using docker inspect command and replace localhost with the IP address of that container in the test plan.
More information: Networking with standalone containers
Just in case I truly hope you know what you're doing because running JMeter and the application under test on the same machine, especially virtual, especially a Docker one is the worst approach for assessing the performance as JMeter might be very resource intensive as well as the system under load so you will have hard time analyzing the results due to race conditions so I would recommend reconsidering your test lab setup or at least using software like cAdvisor or JMeter PerfMon Plugin to monitor resources utilization.
However the best option would be having the system under test and JMeter on a different physical or at least virtual machines.
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
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.
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
On my remote host I am running jmeter server
./jmeter-server
I have kicked the jmeter from my local machine using this command
./jmeter -Jremote_hosts=Remote Host IP
GUI Pops up
Open my test.jmx and Run->RemoteHost->RemoteHostIP
At this time, jmeter freezes, I was unable to do much after that
my test had 1 thread, 60secs ramp, run 1 time
Any idea why is it frozen and I am not be see any test results. I do not have any listeners except "View Results Tree"
I faced the same issue. In my case, it was due to the firewall (ufw on ubuntu). After stopping the firewall I was able to run the tests normally.