blob: 3661598b1e627a79b374798c669e60081b14b724 [file] [log] [blame]
<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="en">
<head>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
<title>Apache JMeter
-
Apache JMeter Distributed Testing Step-by-step</title>
<meta name="author" value="JMeter developers">
<meta name="email" value="dev@jmeter.apache.org">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Merriweather:400normal" rel="stylesheet" type="text/css">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="../css/new-style.css">
<link rel="apple-touch-icon-precomposed" href="../images/apple-touch-icon.png">
<link rel="icon" href="../images/favicon.png">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="../images/mstile-144x144.png">
<meta name="theme-color" content="#ffffff">
</head>
<body role="document">
<a href="#content" class="hidden">Main content</a>
<div class="header">
<!--
APACHE LOGO
-->
<div>
<a href="https://www.apache.org"><img title="Apache Software Foundation" class="asf-logo logo" src="../images/asf-logo.svg" alt="Logo ASF"></a>
</div>
<!--
PROJECT LOGO
-->
<div>
<a href="https://jmeter.apache.org/"><img class="logo" src="../images/logo.svg" alt="Apache JMeter"></a>
</div>
<div class="banner">
<a href="https://www.apache.org/events/current-event.html"><img src="https://www.apache.org/events/current-event-234x60.png" alt="Current Apache event teaser"></a>
<div class="clear"></div>
</div>
</div>
<div class="nav">
<ul class="menu">
<li onClick="return true">
<div class="menu-title">About</div>
<ul>
<li>
<a href="../index.html">Overview</a>
</li>
<li>
<a href="https://www.apache.org/licenses/">License</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Download</div>
<ul>
<li>
<a href="../download_jmeter.cgi">Download Releases</a>
</li>
<li>
<a href="../changes.html">Release Notes</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Documentation</div>
<ul>
<li>
<a href="../usermanual/get-started.html">Get Started</a>
</li>
<li>
<a href="../usermanual/index.html">User Manual</a>
</li>
<li>
<a href="../usermanual/best-practices.html">Best Practices</a>
</li>
<li>
<a href="../usermanual/component_reference.html">Component Reference</a>
</li>
<li>
<a href="../usermanual/functions.html">Functions Reference</a>
</li>
<li>
<a href="../usermanual/properties_reference.html">Properties Reference</a>
</li>
<li>
<a href="../changes_history.html">Change History</a>
</li>
<li>
<a href="../api/index.html">Javadocs</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/Home">JMeter Wiki</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterFAQ">FAQ (Wiki)</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Tutorials</div>
<ul>
<li>
<a href="../usermanual/jmeter_distributed_testing_step_by_step.html">Distributed Testing</a>
</li>
<li>
<a href="../usermanual/jmeter_proxy_step_by_step.html">Recording Tests</a>
</li>
<li>
<a href="../usermanual/junitsampler_tutorial.html">JUnit Sampler</a>
</li>
<li>
<a href="../usermanual/jmeter_accesslog_sampler_step_by_step.html">Access Log Sampler</a>
</li>
<li>
<a href="../usermanual/jmeter_tutorial.html">Extending JMeter</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Community</div>
<ul>
<li>
<a href="../issues.html">Issue Tracking</a>
</li>
<li>
<a href="https://www.apache.org/security/">Security</a>
</li>
<li>
<a href="../mail.html">Mailing Lists</a>
</li>
<li>
<a href="../svnindex.html">Source Repositories</a>
</li>
<li>
<a href="../building.html">Building and Contributing</a>
</li>
<li>
<a href="https://projects.apache.org/project.html?jmeter">Project info at Apache</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterCommitters">Contributors</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Foundation</div>
<ul>
<li>
<a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>
</li>
<li>
<a href="https://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a>
</li>
<li>
<a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li>
<a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
</ul>
</li>
</ul>
</div>
<div class="main" id="content">
<div class="social-media">
<ul class="social-media-links">
<li class="twitter">
<a href="https://twitter.com/ApacheJMeter" title="Follow us on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i>Twitter</a>
</li>
<li class="github">
<a href="https://github.com/apache/jmeter" title="Fork us on github"><i class="fa fa-github" aria-hidden="true"></i>github</a>
</li>
</ul>
</div>
<ul class="pagelinks">
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="jmeter_proxy_step_by_step.html">Next &gt;</a>
</li>
</ul>
<div class="section">
<h1 id="distributed-testing">25. Apache JMeter Distributed Testing Step-by-step<a class="sectionlink" href="#distributed-testing" title="Link to here">&para;</a>
</h1>
<p>
This short tutorial explains how to use multiple systems to perform stress testing. Before we start, there are a couple of things to check.
</p>
<ul>
<li>the firewalls on the systems are turned off or correct ports are opened.</li>
<li>all the clients are on the same subnet.</li>
<li>the server is in the same subnet, if <span class="code">192.x.x.x</span> or <span class="code">10.x.x.x</span> IP addresses are used.
If the server doesn't use <span class="code">192.xx</span> or <span class="code">10.xx</span> IP address, there shouldn't be any problems.</li>
<li>Make sure JMeter can access the server.</li>
<li>Make sure you use the same version of JMeter and Java on all the systems. Mixing versions will not work correctly.</li>
<li>You have <a href="remote-test.html#setup_ssl">setup SSL for RMI</a> or disabled it.</li>
</ul>
<p>
Once you've made sure the systems are ready, it's time to setup remote testing. The tutorial assumes you already
have JMeter installed on all the systems. The way JMeter works is one master controller initiates the test on multiple slave systems.
</p>
<div class="clear"></div>
<div class="note">In this tutorial we use GUI Mode just for demonstration. In real life you should use CLI mode (NON GUI) to start your load test</div>
<div class="clear"></div>
<figure>
<a href="../images/screenshots/distributed-jmeter.svg"><img src="../images/screenshots/distributed-jmeter.svg" width="610" height="462" alt="One master controls multiple slaves"></a>
<figcaption>One master controls multiple slaves</figcaption>
</figure>
<div class="subsection">
<h2 id="terminology">25.1 Terminology<a class="sectionlink" href="#terminology" title="Link to here">&para;</a>
</h2>
<p>
Before we dive into the step-by-step instructions, it's a good idea to define the terms and make sure the definition is clear.
</p>
<dl>
<dt>Master</dt>
<dd>the system running JMeter GUI, which controls the test</dd>
<dt>Slave</dt>
<dd>the system running <span class="code">jmeter-server</span>, which takes commands from
the GUI and send requests to the target system(s)</dd>
<dt>Target</dt>
<dd>the webserver we plan to stress test</dd>
</dl>
<figure>
<a href="../images/screenshots/distributed-names.svg"><img src="../images/screenshots/distributed-names.svg" width="602" height="360" alt="Categories of systems"></a>
<figcaption>Categories of systems</figcaption>
</figure>
</div>
<div class="subsection">
<h2 id="step-by-step">25.2 Step-by-Step<a class="sectionlink" href="#step-by-step" title="Link to here">&para;</a>
</h2>
<ol>
<li>On the slave systems, go to <span class="code">jmeter/bin</span> directory and execute
<span class="code">jmeter-server.bat</span> (<span class="code">jmeter-server</span> on unix).
</li>
<li>On master system acting as the console, open windows explorer and go to
<span class="code">jmeter/bin</span> directory</li>
<li>Open <span class="code">jmeter.properties</span> in a text editor</li>
<li>Edit the line <span class="code">remote_hosts=127.0.0.1</span>
</li>
<li>Add the IP address. For example, if I have JMeter server running on <span class="code">192.168.0.10</span>,
&hellip;, <span class="code">192.168.0.15</span>, the entry would look like this:
<pre class="source">remote_hosts=192.168.0.10,192.168.0.11,192.168.0.12,192.168.0.13,192.168.0.14</pre>
</li>
<li>Start JMeter.</li>
<li>Open the test plan you want to use</li>
</ol>
<figure>
<a href="../images/screenshots/example-simple-plan.png"><img src="../images/screenshots/example-simple-plan.png" width="483" height="266" alt="Simple test plan"></a>
<figcaption>Simple test plan</figcaption>
</figure>
</div>
<div class="subsection">
<h2 id="starting">25.2 Starting the Test<a class="sectionlink" href="#starting" title="Link to here">&para;</a>
</h2>
<p>
At this point, you are ready to start load testing. If you want to double check
the slave systems are working, open <span class="code">jmeter.log</span> in your editor. You should see the following in the log.
</p>
<pre class="source">
Writing log file to: /XXXX/XXXXX/bin/jmeter-server.log
Created remote object: UnicastServerRef [liveRef: [endpoint:[192.X.X.X:XXXXX](local),objID:[-6a665beb:15a2c8b9419:-7fff, 3180474504933847586]]]
</pre>
<p>
If you do not see this message, it means <span class="code">jmeter-server</span> did not start correctly. For tips on
debugging the issue, <a href="#tips">go to the tips section</a>. There are two ways to
initiate the test: a single system and all systems.
</p>
</div>
<div class="subsection">
<h2 id="start-single-client">25.3 Start a single clients<a class="sectionlink" href="#start-single-client" title="Link to here">&para;</a>
</h2>
<ol>
<li>Click Run at the top</li>
<li>Select Remote Start</li>
<li>Select the IP address</li>
</ol>
<figure>
<a href="../images/screenshots/example-remote-start.png"><img src="../images/screenshots/example-remote-start.png" width="490" height="196" alt="Start a single slave"></a>
<figcaption>Start a single slave</figcaption>
</figure>
</div>
<div class="subsection">
<h2 id="start-all-clients">25.4 Start all clients<a class="sectionlink" href="#start-all-clients" title="Link to here">&para;</a>
</h2>
<ol>
<li>Click Run at the top</li>
<li>Select Remote Start all or use <span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">Shift</span>&nbsp;+&nbsp;<span class="keysym">R</span></span>
</li>
</ol>
<figure>
<a href="../images/screenshots/example-remote-start-all.png"><img src="../images/screenshots/example-remote-start-all.png" width="410" height="155" alt="Start all slaves"></a>
<figcaption>Start all slaves</figcaption>
</figure>
</div>
<div class="subsection">
<h2 id="limitations">25.5 Limitations<a class="sectionlink" href="#limitations" title="Link to here">&para;</a>
</h2>
<p>
There are some basic limitations for distributed testing. Here's the list of the known items in no specific order.
</p>
<ol>
<li>RMI cannot communicate across subnets without a proxy; therefore neither can JMeter without a proxy.</li>
<li>Since version 2.9, JMeter sends all the test results stripping Response data to the controlling console, this allows
us to reduce impact on network IO. Ensure you monitor your network traffic so that this traffic does not incur contention</li>
<li>A single JMeter client running on a 2-3 GHz CPU (recent CPU) can handle 1000-2000 threads depending on the type of test.</li>
</ol>
</div>
<div class="subsection">
<h2 id="additional-resources">25.6 Additional resources<a class="sectionlink" href="#additional-resources" title="Link to here">&para;</a>
</h2>
<p>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterFAQ#JMeterFAQ-Howtodoremotetestingthe'properway'?">Wiki page on remote testing</a>
</p>
<p>
<a href="remote-test.html">Remote Testing in the user manual</a>
</p>
</div>
<div class="subsection">
<h2 id="tips">25.7 Tips<a class="sectionlink" href="#tips" title="Link to here">&para;</a>
</h2>
<p>
In some cases, the firewall may still be blocking RMI traffic.
</p>
<h3>Anti Virus and Firewall</h3>
<div class="clear"></div>
<div class="note">Antivirus should be stopped during a Load Test as it can drastically impact timings leading to wrong results.</div>
<div class="clear"></div>
<p>
Firewall needs to be stopped from windows services or at least some ports need to be opened.
</p>
<ol>
<li>Open control panel</li>
<li>Open administrative tools</li>
<li>Double click services</li>
<li>Go to down to Symantec anti virus, right click and select stop</li>
</ol>
<h3>Windows firewall</h3>
<ol>
<li>Open network connections</li>
<li>Select the network connection</li>
<li>Right click and select properties</li>
<li>Select advanced tab</li>
<li>Uncheck internet connection firewall</li>
</ol>
<h3>Linux</h3>
<p>
On Linux, iptables might be turned on by default. For instructions, please refer to the
<a href="remote-test.html">Remote Testing in the user manual</a>
</p>
<p>
On RedHat (or derivatives), iptables is turned on by default. Execute
<pre class="source">service iptables stop</pre>
to stop the Linux firewall or ensure you open the correct ports.
</p>
</div>
</div>
<ul class="pagelinks">
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="jmeter_proxy_step_by_step.html">Next &gt;</a>
</li>
</ul>
<div class="share-links">
Share this page:
<ul>
<li class="fb">
<a data-social-url="https://facebook.com/sharer/sharer.php?u=" title="Share on facebook"><i class="fa fa-facebook" aria-hidden="true"></i>share</a>
</li>
<li class="twitter">
<a data-social-url="https://twitter.com/intent/tweet?url=" title="Tweet on twitter"><i class="fa fa-twitter" aria-hidden="true"></i>tweet</a>
</li>
</ul>
</div>
<a href="#top" id="topButton">Go to top</a>
</div>
<div class="footer">
<div class="copyright">
Copyright &copy;
1999 &ndash;
2020
, Apache Software Foundation
</div>
<div class="trademarks">Apache, Apache JMeter, JMeter, the Apache
feather, and the Apache JMeter logo are
trademarks of the
Apache Software Foundation.
</div>
</div>
<script>(function(){
"use strict";
// enable 'go to top' button functionality
document.addEventListener('scroll', function() {
if (document.body.scrollTop > 500 || document.documentElement.scrollTop > 500) {
document.getElementById("topButton").style.display = "block";
} else {
document.getElementById("topButton").style.display = "none";
}
});
// fill in the current location into social links on this page.
var as = document.getElementsByTagName('a');
var loc = document.location.href;
if (!loc.toLowerCase().startsWith('http')) {
return;
}
for (var i=0; i<as.length; i++) {
var href = as[i].getAttribute('data-social-url');
if (href !== null) {
as[i].href = href + encodeURIComponent(loc);
}
}
})();</script>
</body>
</html>