testing performance on Linux dockers - jmeter

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.

Related

OpenTelemetry for short-lived scripts?

Our system consists of many python scripts that are run on "clean" machines, that is, they need to have as little additional software on them as possible. Is there a way we could use OpenTelemetry without having to run additional servers on those machines? Is there a push model for sending data instead of pull?
Considering your additional explanation I imagine you will eventually want to collect all telemetry from these systems. Using OTLP exporters you can send all three signals traces, metrics, logs to collector service (As of now only tracing is stable and metrics, logs work is experimental). You would not have to run any additional servers on these resource constrained servers for your use case. There are two deployments strategies recommended for opentelemetry collector.
As an agent - Runs along with the application on same host machine.
As a gateway - Runs on standalone server outside the application host machine.
Running collector agent on same application host machine offloads some of the work from language client libs and enhances the telemetry but can be resource incentive.
Read more about collector here https://opentelemetry.io/docs/collector/getting-started/

Why it is recommended to run load test in non gui mode in jmeter

I'm monitoring the connect time and latency to connect from jmeter machine while running in GUI mode and that is in within acceptable limit.
Should we strictly follow non GUI mode even though I can able to perform load test with GUI mode?
I'm targeting 250 TPS and able to achieve that ..I have increased my memory and monitoring CPU and memory of load generator is below 60%.
Should I go for non GUI mode ?
The main limitation is that each event in the queue is being handled by a single event dispatch thread which will act as the bottleneck on your JMeter side.
My expectation is that your "250 TPS" look like:
while it should look like:
So check how does your load pattern look like using i.e. Transactions per Second listener (installable via JMeter Plugins Manager)
Also check how does your JVM look like especially when it comes to garbage collection, it can be done via i.e. JVisualVM, most probably you will see the same "chainsaw" pattern
You don't need to follow JMeter best practices, but
you may encounter issues to achieve specifc goals (as TPS)
your machine can't execute GUI or have low resources
you execute JMeter using a script or build tool as Jenkins
Also it's better to be familiar with JMeter CLI (non GUI) and its report capabilities
JMeter supports dashboard report generation to get graphs and statistics from a test plan.
Also it will be needed for using distributed testing
consider running multiple CLI JMeter instances on multiple machines using distributed mode (or not)
CLI also useful for Parameterising tests
The "loops" property can then be defined on the JMeter command-line:
jmeter … -Jloops=12

Why the throughput of the same Jmeter project differ so much?

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

Jmeter performance monitoring using perfmon plugin

I am trying to use Jmeter perfmon plugin to monitor cpu and memory utilisation of server.
Server is hosted on linux machine and is running apache and postgresql.
I am running serveragent in linux server and added cpu and memory parameters in Jmeter perfmon metrics collector.
Now when I run my Jmeter tests then both apache and postgrelsql are used.I can see some data coming in performance collector.
1)How can I find cpu utilization of apachae and progresql when test are run?
2) I can see memory is coming as a straight line. I read in some other threads its because of JVM constant memory usage.I am not able to understand why this is happening.Server agent should give memory utilization of all processes rather than JVM. How can I get actual memory usage in this case?
Neither apache nor postgres use JVM, are you sure you are running Server Agent on a correct host?
With regards to your question itself: it is possible to track Per-Process metrics, for example you can apply configuration like:
You will need to replace:
localhost with the hostname or IP address of the machine where apache, postgres and JMeter server agent are running
4949 with the real PID of your apache instance
3521 with the real PID of your postgres instance
Once done you should see 4 charts standing for apache CPU usage, apache memory usage, postgres CPU usage and postgres memory usage correspondingly.
See How to Monitor Your Server Health & Performance During a JMeter Load Test article for more information.

Is perfmon in jemter analysing cpu utilisation of local machine or the server where application is hosted?

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

Resources