I'm using JMeter 3.3 to load test MongoDB 3.4. Because I want to simulate 10k near-parallel users I'm using the distributed mode of JMeter on 35 VMs. In addition I follow many of the performance-tips for JMeter include starting it in non-gui-mode using no Listeners, increasing heap-size etc. When I add more slaves to the JMeter-Cluster I get better performance-results from MongoDB. So it is obvious that the bottleneck is still JMeter. But somehow I have a strange feeling because the 35 VMs have 8 cpu-cores each and 28 GB RAM. Some more facts on my setup:
JMeter Thread Group: 286 Threads, Ramp-Up Period 15 seconds, loop count forever, duration 300 (so in addition on 35 machines there will be 10010 threads stressing the MongoDB approximately 5 minutes).
I'm using the MongoDB Source Config. I know that it's deprecated but can't find an alternative... and a JSR223 Sampler with this groovy script:
import com.mongodb.*;
import org.apache.jmeter.protocol.mongodb.config.MongoDBHolder
import java.util.concurrent.ThreadLocalRandom;
int randomNumber = ThreadLocalRandom.current().nextInt(1, 50000001);
DB db = MongoDBHolder.getDBFromSource(„whatever“, „inka“);
DBCollection collection = db.getCollection(„profiles“);
BasicDBObject query = new BasicDBObject(„_id“, randomNumber);
DBObject result = collection.findOne(query);
SampleResult.setResponseData(result.toString().getBytes());
So finally my question: does it seem plausible to you that 35 VMs still aren't enough? I appreciate any thought!
Maximum connections per hostset to10therefore each JMeter slave creates at most 10 connections to MongoDB server(s) so all your requests may be queuing up waiting for next available connection from the connection pool. Try playing with settings. More information: How to Load Test MongoDB with JMeter – Dmitri T Nov 22 '17 at 11:41