I am using Jmeter to test load test my SpringBoot website. The website is deployed in our Linux server.
I tested in my local computer, the throughout is arond 500/sec. I copyed the Jmeter package(including bin, doc...) and jmx file to my collegue's computer. He used the same Jmeter to run the same jmx project, but the through is always under 200/sec.
That is very confusing. We have the same jmx project, and load test the same website, why the throughout differs so much?
Edit: Or maybe the local computer environment will affect this. Do you know where? The JVM config or CPU?
I can think of at least 3 possible issues:
Different Java version. Make sure to have the same JDK or Server JRE version
Different hardware specifications
CPU
RAM
NIC
Different operating system version/setup
Different network connectivity, i.e. if you're connected via Ethernet and your colleague is sitting on Wi-Fi it might matter
I would recommend setting up monitoring of:
JVM health status - you can do this using i.e. JVisualVM
OS health status - you can do this using built-in monitoring tools or JMeter PerfMon Plugin
Related
When I use Jmeter or any other load tool in Linux, I always tune the OS in the Load Drivers to make sure they are not a bottleneck. Things I typically do:
Make sure anonymous ports go from 5k to 65k (60k ports available)
Can configure Linux with TCP_TW_REUSE to minimize sockets in TimeWait
ulimit the user that will run the test in terms of open files and max processes
Can somebody please share what tuning is needed in Windows for load drivers to get maximum throughput? I'm new to the use of Windows as the OS for load drivers.
Thanks.
It's configurable via registry: MaxUserPort key under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\TCPIP\Parameters
It's configurable via registry: TcpTimedWaitDelay key under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Windows doesn't have hard limits on open file handles, it's not applicable
References:
Settings that can be Modified to Improve Network Performance
Configuring the Windows port in Jmeter when number of Request is high
JMeter Best Practices
9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure
I have several scripts testing performance of Linux server. there are about 12 dockers containers running inside the Linux.
We are interested on collecting also metrics of containers (right now we are collecting only of the Linux machine itself)
Is there any plugin for this? or can this be done with the Perfmon plugin?
There are several ways of monitoring Docker instance statistics:
Built-in Runtime Metrics
cAdvisor - probably this one will be the easiest to setup and use
Any of built-in Linux monitoring tools
Of course you can normally use JMeter PerfMon Plugin as this way you will get performance monitoring results integrated into your test script and be able to correlate JMeter metrics with server health metrics. Just make sure there is a TCP/UDP connectivity between JMeter and PerfMon Server Agent, default port is 4445 so make sure container exposes this port to the outside world.
JMeter search result is different in the Local machine and remote server machine.
The JMeter batch file runs both environments separately.
Run one website in JMeter but the local machine and remote server load time are different.
Both machine internet speed is proper.
Several factors can influence that:
1) Network path from running JMeter to your server. You should always consider that.
If, say, you're testing microservice based on Amazon Cloud (AWS), and the downstream consumers of its data are also running in the same cloud - it doesn't make a lot of sense to run JMeter at your local machine, you have to run it at AWS as well (as your consumers do) to get realistic timings.
The travel over network path there and back would add hundreds of milliseconds, moreover, it's pretty unpredictable, deviations may be huge.
2) GUI vs Non-GUI mode, the rule of thumb: GUI is for development/debug only. It takes quite a toll on the performance.
3) Available resources on the machine - you didn't mention that at all, though mind that Java Runtime Environment is kind of far from being very lean, so if the machine is not dedicated for running especially JMeter, and especially if machine is not very powerful, the results may vary.
4) Addition to resource scope: by default, the scripts running JMeter are quite restrictive in resource allocation, and if you overwhelm the instance with a lot of threads to run, the timings may get distorted.
These are general factors, if you want it more specific to your case - show how & where (means, in what type of machine) you run your tests, and where's your target in terms of network path.
Application is deployed in 16GBVM. While running JMeter from dedicated system throwing Network socket exception for 300 users
When i changed application to 8GB dedicated system its is working for 500 users trowing some other java exception.
Will JMeter support VM? Will get similar results(response time, throughput) like dedicated system.
Thanks in Advance.
JMeter doesn't know anything about underlying software or hardware, it is pure Java application so its run inside Java Virtual Machine which is an abstraction layer on top of OS which in its turn the abstraction layer on top of hardware.
So given VM and real device have similar hardware specifications you should get the similar results. Just make sure you following JMeter Best Practices, to wit:
Run your test in non-GUI mode
Disable all listeners during test run
Use only those pre/post processors and assertions which are absolutely required
Tune Java Heap and Garbage Collection settings according to total amount of available physical RAM and your load pattern.
See 9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure article for comprehensive information and some JMeter tuning tips.
Just need to know that perfmon plugin which is used in jmeter tool, does it analyse cpu/memory, disk utilization of local machine or the server where application is hosted?
Because as a user when give IP and port, we give these details of the remote machines when we perform load test.
Please let me know .
As per JMeter Scientist,
The PerfMon listener was implemented in following way: The
Host collects PerfMon, Remote nodes don't collect PerfMon.
So, Master will collect metrics from the Slaves.
This might help
PerfMon Metrics Collector fetches performance metrics from ServerAgent(s) via TCP or UDP. And it's up to you where you want to install the ServerAgent(s), on JMeter or Application Under Test side or both.
Normally ServerAgent(s) is/are installed on Application Under Test side, i.e. web servers, database servers, load balancers, etc. to measure the load on that end, however if you want to collect performance stats from load generators - feel free to install Server Agent(s) on JMeter machine(s).
See How to Monitor Your Server Health & Performance During a JMeter Load Test article for comprehensive information on PerfMon installation and usage