I want to do (distributed) performance/load testing using jmeter on an Aspnet core 3.1 application on linux but I'm not satisfied with the results I had so far.
To make sure the environment is well configured, I tried to run some tests on the basic api sample created by visual studio: "WeatherForecast". (It consists of a simple api controller that returns random temperatures for the next five days)
The test
The test consists of a concurrency thread group that calls the api while ramping-up from 1 to 30 threads during 15 minutes. Monitoring CPU, response time and response codes over time.
I omitted RAM, Disk IO, and network metrics after making sure they're not stressing considerably (they only make the perfmon tool consume more cpu)
The result
I'm not able to have the CPU at 100%. It increases by ~15% every ramp during the first 5 threads, then settles at around 70% and only slightly increases to reach ~85% at the end of the test. the response time remains stable at around 2ms, and slightly start growing to 6ms from the 10th thread.
Tuning attempts
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
: Enabled the reuse of socketsecho 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range
: Increased the range of local portsulimit -n 65000
: Increased the max open files count-Xms4g -Xmx8g
: Increased Jmeter's heap size- Tried distributed testings: 1 master 1 slave and 1 master 2 slaves : same results
- Ran the tests with & without the gui
Some of these attempts slightly improved the cpu usage, but the trend/behavior is always the same.
What may i have missed ?