<!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
          -
          User's Manual: Remote (Distributed) Testing</title>
<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="listeners.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="generating-dashboard.html">Next &gt;</a>
</li>
</ul>
<div class="section">
<h1>13. Remote Testing</h1>


<p>In the event that your JMeter client machine is unable, performance-wise, to simulate
enough users to stress your server or is limited at network level, an option exists to control multiple, remote JMeter
engines from a single JMeter client.  By running JMeter remotely, you can replicate
a test across many low-end computers and thus simulate a larger load on the server.  One
instance of the JMeter client can control any number of remote JMeter instances, and collect
all the data from them.  This offers the following features:

<ul>

<li>Saving of test samples to the local machine </li>

<li>Management of multiple JMeterEngines from a single machine </li>

<li>No need to copy the test plan to each server - the client sends it to all the servers</li>

</ul>

</p>

<div class="clear"></div>
<div class="note">
Note: The same test plan is run by all the servers.
JMeter does not distribute the load between servers, each runs the full test plan.
So if you set 1000 Threads and have 6 JMeter server, you end up injecting 6000 Threads.
</div>
<div class="clear"></div>

<p>
However, remote mode does use more resources than running the same number of CLI mode tests independently.
If many server instances are used, the client JMeter can become overloaded, as can the client network connection.
This has been improved by switching to Stripped modes (see below) but you should always check that your client is not overloaded.
</p>

<p>Note that while you can execute the JMeterEngine on your application
server, you need to be mindful of the fact that this will be adding processing
overhead on the application server and thus your testing results will be
somewhat tainted.  The recommended approach is to have one or more machines on
the same Ethernet segment as your application server that you configure to run
the JMeter Engine.  This will minimize the impact of the network on the test
results without impacting the performance of the application server
itself.
</p>


<p>
<b>Step 0: Configure the nodes</b>
</p>

<p>
Make sure that all the nodes (client and servers) :
<ul>
    
<li>are running exactly the same version of JMeter.</li>
    
<li>are using the same version of Java on all systems. Using different versions of Java may work but is discouraged.</li>
    
<li>have a <a href="#setup_ssl">valid keystore for RMI over SSL</a>, or you have disabled the use of SSL.</li>

</ul>

</p>

<p>
If the test uses any data files, <b>note that these are not sent across by the client so
make sure that these are available in the appropriate directory on each server</b>.
If necessary you can define different values for properties by editing the <span class="code">user.properties</span> or <span class="code">system.properties</span>
files on each server. These properties will be picked up when the server is started and may be
used in the test plan to affect its behaviour (e.g. connecting to a different remote server).
Alternatively use different content in any datafiles used by the test
(e.g. if each server must use unique ids, divide these between the data files)
</p>


<p>
<b>Step 1: Start the servers </b>
</p>

<p>To run JMeter in remote node, start the JMeter server component on all machines you wish to run on by running
the <span class="code">JMETER_HOME/bin/jmeter-server</span> (unix) or <span class="code">JMETER_HOME/bin/jmeter-server.bat</span> (windows) script.</p>

<p>Note that there can only be one JMeter server on each node unless different RMI ports are used.</p>

<p>Since JMeter 2.3.1, the JMeter server application starts the RMI registry itself;
there is no need to start RMI registry separately.
To revert to the previous behaviour, define the JMeter property <pre class="source">server.rmi.create=false</pre> on the server host systems.
</p>

<p>
By default, RMI uses dynamic ports for the JMeter server engine. This can cause problems for firewalls,
so you can define the JMeter property <span class="code">server.rmi.localport</span>
to control this port numbers.
If this is non-zero, it will be used as the base for local port numbers for the server engine. At the moment JMeter will open up to three ports beginning with the port defined in <span class="code">server.rmi.localport</span>.
</p>

<p>
<b>Step 2: Add the server IP to your client's Properties File</b>
</p>

<p>Edit the properties file <i>on the controlling JMeter machine</i>.  In <span class="code">JMETER_HOME/bin/jmeter.properties</span>,
find the property named "<span class="code">remote_hosts</span>" and
add the value of your running JMeter server's IP address.  Multiple such servers can be added, comma-delimited.</p>

<p>Note that you can use the <span class="code">-R</span> <a href="get-started.html#override">command line option</a>
instead to specify the remote host(s) to use. This has the same effect as using <span class="code">-r</span> and <span class="code">-Jremote_hosts={serverlist}</span>.
    E.g. </p>
<pre class="source">jmeter -Rhost1,127.0.0.1,host2</pre>

<p>If you define the JMeter property <span class="code">server.exitaftertest=true</span>, then the server will exit after it runs a single test.
See also the <span class="code">-X</span> flag (described below)
</p>

<p>
<b>Step 3a: Start the JMeter Client from a GUI client to check configuration</b>
</p>

<p>Now you are ready to start the controlling JMeter client. For MS-Windows, start the client with the script "<span class="code">bin/jmeter.bat</span>".  For UNIX,
use the script "<span class="code">bin/jmeter</span>".  You will notice that the Run menu contains two new sub-menus: "Remote Start" and "Remote Stop"
(see figure 1). These menus contain the client that you set in the properties file.  Use the remote start and stop instead of the
normal JMeter start and stop menu items.</p>

<figure>
<a href="../images/screenshots/remote/run-menu00.png"><img src="../images/screenshots/remote/run-menu00.png" width="487" height="295" alt="Figure 1 - Run Menu"></a>
<figcaption>Figure 1 - Run Menu</figcaption>
</figure>


<p>
<b>Step 3b: Start the JMeter from a CLI mode Client</b>
</p>

<p>
GUI mode should only be used for debugging, as a better alternative, you should start the test on remote server(s) from a CLI mode (command-line) client.
The command to do this is:</p>

<pre class="source">
jmeter -n -t script.jmx -r
</pre>

<p>or</p>

<pre class="source">
jmeter -n -t script.jmx -R server1,server2,&hellip;
</pre>

<p>
Other flags that may be useful:
</p>

<dl>

<dt>
<span class="code">-Gproperty=value</span>
</dt>
<dd>define a property in all the servers (may appear more than once)</dd>

<dt>
<span class="code">-X</span>
</dt>
<dd>Exit remote servers at the end of the test.</dd>

</dl>

<p>
The first example will start the test on whatever servers are defined in the JMeter property <span class="code">remote_hosts</span>;<br>
The second example will define <span class="code">remote_hosts</span> from the list of servers and then start the test on the remote servers.
<br>
The command-line client will exit when all the remote servers have stopped.
</p>

<div class="subsection">
<h2 id="setup_ssl">13.1 Setting up SSL<a class="sectionlink" href="#setup_ssl" title="Link to here">&para;</a>
</h2>

<div class="clear"></div>
<div class="note">Since JMeter 4.0 the default transport mechanism for RMI will use SSL. SSL needs keys and certificates to work. You will have to create those keys yourself.</div>
<div class="clear"></div>

<p>
The simplest setup is to use one key/cert pair for all JMeter servers and clients you want to connect. JMeter comes with a script to generate a keystore that
contains one key (and its corresponding certificate) named <span class="code">rmi</span>. The script is located in the <span class="code">bin</span> directory and is available for Windows systems (called <span class="code">bin/create-rmi-keystore.bat</span>) and Unix like systems (called <span class="code">bin/create-rmi-keystore.sh</span>). It will generate a key-pair, that is valid for seven days, with a default passphrase of value '<span class="code">changeit</span>'. It is advised to call it from inside the <span class="code">bin</span> directory.
</p>

<p>
When you run the script, it will ask you some questions about some names it will embed in the certificate. You can type in whatever you want, as long the keystore tool accepts it. That value has to match the property <span class="code">server.rmi.ssl.keystore.alias</span>, which defaults to <span class="code">rmi</span>. A sample session to create the keystore is shown below.
</p>

<pre class="source">$ cd jmeter/bin
$ ./create-rmi-keystore.sh
What is your first and last name?
  [Unknown]:  rmi
What is the name of your organizational unit?
  [Unknown]:  My unit name
What is the name of your organization?
  [Unknown]:  My organisation name
What is the name of your City or Locality?
  [Unknown]:  Your City
What is the name of your State or Province?
  [Unknown]:  Your State
What is the two-letter country code for this unit?
  [Unknown]:  XY
Is CN=rmi, OU=My unit name, O=My organisation name, L=Your City, ST=Your State, C=XY correct?
  [no]:  yes

Copy the generated rmi_keystore.jks to jmeter/bin folder or reference it in property 'server.rmi.ssl.keystore.file'
</pre>

<p>
The <a href="properties_reference.html#remote">defaults settings for RMI</a> should work with this setup. Copy the file <span class="code">bin/rmi_keystore.jks</span> to every JMeter server and client you want to use for your distributed testing setup.
</p>

</div>

<div class="subsection">
<h2 id="detail_instructions">13.2 Doing it Manually<a class="sectionlink" href="#detail_instructions" title="Link to here">&para;</a>
</h2>

<p>In some cases, the jmeter-server script may not work for you (if you are using an OS platform not anticipated by the JMeter developers).
Here is how to start the JMeter servers (step 1 above) with a more manual process:</p>

<p>
<b>Step 1a: Start the RMI Registry</b>
</p>

<p>
Since JMeter 2.3.1, the RMI registry is started by the JMeter server, so this section does not apply in the normal case.
To revert to the previous behaviour, define the JMeter property <span class="code">server.rmi.create=false</span> on the server host systems
and follow the instructions below.
</p>

<p>JMeter uses Remote Method Invocation (RMI) as the remote communication mechanism.  Therefore, you need
to run the RMI Registry application (which is named "<span class="code">rmiregistry</span>") that comes with the JDK and is located in the "<span class="code">bin</span>"
directory.  Before running <span class="code">rmiregistry</span>, make sure that the following jars are in your system classpath:
<ul>
    
<li>
<span class="code">JMETER_HOME/lib/ext/ApacheJMeter_core.jar</span>
</li>
    
<li>
<span class="code">JMETER_HOME/lib/jorphan.jar</span>
</li>
    
<li>
<span class="code">JMETER_HOME/lib/logkit-2.0.jar</span>
</li>

</ul>
The
rmiregistry application needs access to certain JMeter classes.  Run <span class="code">rmiregistry</span> with no parameters.  By default the
application listens to port <span class="code">1099</span>.</p>


<p>
<b>Step 1b: Start the JMeter Server</b>
</p>

<p>Once the RMI Registry application is running, start the JMeter Server.
Use the "<span class="code">-s</span>" option with the jmeter startup script ("<span class="code">jmeter -s</span>").</p>


<p>Steps 2 and 3 remain the same.</p>

</div>

<div class="subsection">
<h2 id="tips">13.3 Tips<a class="sectionlink" href="#tips" title="Link to here">&para;</a>
</h2>

<p>
JMeter/RMI requires a connection from the client to the server. This will use the port you chose, default <span class="code">1099</span>.<br>
JMeter/RMI also requires a reverse connection in order to return sample results from the server to the client.<br>
This will use a high-numbered port. <br>
This port can be controlled by jmeter property called <span class="code">client.rmi.localport</span> in <span class="code">jmeter.properties</span>.<br>
If there are any firewalls or other network filters between JMeter client and server,
you will need to make sure that they are set up to allow the connections through.
If necessary, use monitoring software to show what traffic is being generated.
</p>

<p>If you're running Suse Linux, these tips may help. The default installation may enable the firewall. In that case,
remote testing will not work properly. The following tips were contributed by Sergey Ten.</p>

<p>If you see connections refused, turn on debugging by passing the following options.</p>

<pre class="source">
rmiregistry -J-Dsun.rmi.log.debug=true \
     -J-Dsun.rmi.server.exceptionTrace=true \
     -J-Dsun.rmi.loader.logLevel=verbose \
     -J-Dsun.rmi.dgc.logLevel=verbose \
     -J-Dsun.rmi.transport.logLevel=verbose \
     -J-Dsun.rmi.transport.tcp.logLevel=verbose \
</pre>

<p>Since JMeter 2.3.1, the RMI registry is started by the server; however the options can still be passed in from the JMeter command line.
For example: "<span class="code">jmeter -s -Dsun.rmi.loader.logLevel=verbose</span>" (i.e. omit the <span class="code">-J</span> prefixes).
Alternatively the properties can be defined in the <span class="code">system.properties</span> file.
</p>

<p>The solution to the problem is to remove the loopbacks <span class="code">127.0.0.1</span> and <span class="code">127.0.0.2</span> from <span class="code">/etc/hosts</span>.
What happens is <span class="code">jmeter-server</span> can't connect to rmiregistry if <span class="code">127.0.0.2</span> loopback is not available.
Use the following settings to fix the problem.</p>

<p> Replace</p>

<pre class="source">`dirname $0`/jmeter  -s "$@"</pre>

<p> With</p>

<pre class="source">
HOST="-Djava.rmi.server.hostname=[computer_name][computer_domain] \
      -Djava.security.policy=`dirname $0`/[policy_file]" \
`dirname $0`/jmeter $HOST -s "$@"
</pre>

<p>Also create a policy file and add <span class="code">[computer_name][computer_domain]</span> line to <span class="code">/etc/hosts</span>.</p>


<p>In order to better support SSH-tunneling of the RMI communication channels used
in remote testing, since JMeter 2.6:</p>

<ul>

<li>a new property "<span class="code">client.rmi.localport</span>" can be set to control the RMI port used by the RemoteSampleListenerImpl</li>

<li>To support tunneling RMI traffic over an SSH tunnel as the remote endpoint using a port on the local machine,
 loopback interface is now allowed to be used if it has been specified directly using the Java System Property
 "<span class="code">java.rmi.server.hostname</span>" parameter.</li>

</ul>

</div>

<div class="subsection">
<h2 id="portchange">13.4 Using a different port<a class="sectionlink" href="#portchange" title="Link to here">&para;</a>
</h2>

<p>By default, JMeter uses the standard RMI port <span class="code">1099</span>. It is possible to change this. For this to work successfully,
all the following need to agree:</p>

<ul>

<li>On the server, start <span class="code">rmiregistry</span> using the new port number</li>

<li>On the server, start JMeter with the property <span class="code">server_port</span> defined</li>

<li>On the client, update the <span class="code">remote_hosts</span> property to include the new remote <span class="code">host:port</span> settings</li>

</ul>


<p>Since JMeter 2.1.1, the jmeter-server scripts provide support for changing the port.
For example, assume you want to use port <span class="code">1664</span> (perhaps <span class="code">1099</span> is already used).</p>
On Windows (in a DOS box)
<pre class="source">
C:\JMETER&gt; SET SERVER_PORT=1664
C:\JMETER&gt; JMETER-SERVER [other options]
</pre>
On Unix:
<pre class="source">
$ SERVER_PORT=1664 jmeter-server [other options]
</pre>
[N.B. use upper case for the environment variable]
<p>
In both cases, the script starts rmiregistry on the specified port,
and then starts JMeter in server mode, having defined the "<span class="code">server_port</span>" property.
</p>

<p>
The chosen port will be logged in the server <span class="code">jmeter.log</span> file (<span class="code">rmiregistry</span> does not create a log file).
</p>

</div>


<div class="subsection">
<h2 id="sendermode">13.5 Using a different sample sender<a class="sectionlink" href="#sendermode" title="Link to here">&para;</a>
</h2>

<p>
Listeners in the test plan send their results back to the client JMeter which writes the results to the specified files
By default, samples are sent back synchronously as they are generated.
This can affect the maximum throughput of the server test; the sample result has to be sent back before the thread can
continue.
There are some JMeter properties that can be set to alter this behaviour.
</p>

<dl>

<dt>
<span class="code">mode</span>
</dt>
<dd>sample sending mode - default is <span class="code">StrippedBatch</span> since 2.9. This should be set on the client node.
    <dl>
    
<dt>
<span class="code">Standard</span>
</dt>
<dd>send samples synchronously as soon as they are generated</dd>
    
<dt>
<span class="code">Hold</span>
</dt>
<dd>hold samples in an array until the end of a run. This may use a lot of memory on the server and is discouraged.</dd>
    
<dt>
<span class="code">DiskStore</span>
</dt>
<dd>store samples in a disk file (under <span class="code">java.io.temp</span>) until the end of a run.
    The serialised data file is deleted on JVM exit.</dd>
    
<dt>
<span class="code">StrippedDiskStore</span>
</dt>
<dd>remove responseData from successful samples, and use DiskStore sender to send them.</dd>
    
<dt>
<span class="code">Batch</span>
</dt>
<dd>send saved samples when either the count (<span class="code">num_sample_threshold</span>) or time (<span class="code">time_threshold</span>) exceeds a threshold,
    at which point the samples are sent synchronously.
    The thresholds can be configured on the server using the following properties:
        <dl>
        
<dt>
<span class="code">num_sample_threshold</span>
</dt>
<dd>number of samples to accumulate, default <span class="code">100</span>
</dd>
        
<dt>
<span class="code">time_threshold</span>
</dt>
<dd>time threshold, default 60000 ms = 60 seconds</dd>
        
</dl>

     See also the Asynch mode, described below.</dd>
    
<dt>
<span class="code">Statistical</span>
</dt>
<dd>send a summary sample when either the count or time exceeds a threshold.
    The samples are summarised by thread group name and sample label.
    The following fields are accumulated:
      <ul>
      
<li>
<span class="code">elapsed time</span>
</li>
      
<li>
<span class="code">latency</span>
</li>
      
<li>
<span class="code">bytes</span>
</li>
      
<li>
<span class="code">sample count</span>
</li>
      
<li>
<span class="code">error count</span>
</li>
      
</ul>
    Other fields that vary between samples are lost.
    </dd>
    
<dt>
<span class="code">Stripped</span>
</dt>
<dd>remove responseData from successful samples</dd>
    
<dt>
<span class="code">StrippedBatch</span>
</dt>
<dd>remove responseData from successful samples, and use Batch sender to send them.</dd>
    
<dt>
<span class="code">Asynch</span>
</dt>
<dd>samples are temporarily stored in a local queue. A separate worker thread sends the samples.
        This allows the test thread to continue without waiting for the result to be sent back to the client.
        However, if samples are being created faster than they can be sent, the queue will eventually fill up,
        and the sampler thread will block until some samples can be drained from the queue.
        This mode is useful for smoothing out peaks in sample generation.
        The queue size can be adjusted by setting the JMeter property
        <span class="code">asynch.batch.queue.size</span> (default <span class="code">100</span>) on the server node.
    </dd>
    
<dt>
<span class="code">StrippedAsynch</span>
</dt>
<dd>remove responseData from successful samples, and use Async sender to send them.</dd>
    
<dt>
<span class="code">Custom implementation</span>
</dt>
<dd>set the mode parameter to your custom sample sender class name.
    This must implement the interface <span class="code">SampleSender</span> and have a constructor which takes a single
    parameter of type <span class="code">RemoteSampleListener</span>.
    </dd>
    
</dl>
    
</dd>

</dl>

<div class="clear"></div>
<div class="note">
<span class="code">Stripped</span> mode family strips <span class="code">responseData</span> so this means that some Elements that rely
on the previous <span class="code">responseData</span> being available will not work.<br>
This is not really a problem as there is always a more efficient way to implement this feature.
</div>
<div class="clear"></div>

<p>The following properties apply to the <span class="code">Batch</span> and <span class="code">Statistical</span> modes:</p>
    
<dl>
    
<dt>
<span class="code">num_sample_threshold</span>
</dt>
<dd>number of samples in a batch (default <span class="code">100</span>)</dd>
    
<dt>
<span class="code">time_threshold</span>
</dt>
<dd>number of milliseconds to wait (default 60 seconds)</dd>
    
</dl>

</div>



<div class="subsection">
<h2 id="retries">13.6 Dealing with nodes that failed starting<a class="sectionlink" href="#retries" title="Link to here">&para;</a>
</h2>
  
<p>
    For large-scale tests there is a chance that some part of remote servers will be unavailable or down.
    For example, when you use automation script to allocate many cloud machines and use them as generators,
    some of requested machines might fail booting because of cloud's issues.
    Since JMeter 2.13 there are new properties to control this behaviour.
  </p>
  
<p>
    First what you might want is to retry initialization attempts in hope that failed nodes just slightly delayed their boot.
    To enable retries, you should set <span class="code">client.tries</span> property to total number of connection attempts.
    By default it does only one attempt. To control retry delay, set the <span class="code">client.retries_delay</span> property
    to number of milliseconds to sleep between attempts.
  </p>
  
<p>
    Finally, you might still want to run the test with those generators that succeeded initialization and skipping failed nodes.
    To enable that, set the <span class="code">client.continue_on_fail=true</span> property.
  </p>

</div>


<div class="subsection">
<h2 id="security-manager">13.7 Using a security-manager<a class="sectionlink" href="#security-manager" title="Link to here">&para;</a>
</h2>
  
<p>When running JMeter in a distributed environment you have to be aware, that JMeter is basically a remote execution agent on both the server and client side. This could be used by a malicious party to gain further access, once it has compromised one of the JMeter clients or servers. To mitigate this Java has the concept of a security manager that gets asked by the JVM before potential dangerous actions are executed. Those actions could be resolving host names, creating or reading files or executing commands in the OS.</p>
  
<p>The security manager can be enabled by setting the Java system properties <span class="code">java.security.manager</span> and <span class="code">java.security.policy</span>. Be sure to have a look at the <a href="https://docs.oracle.com/javase/tutorial/security/tour2/index.html">Quick Tour of Controlling Applications</a>.</p>
  
<p>Using the new mechansism of <span class="code">setenv.sh</span> (or <span class="code">setenv.bat</span> under Windows) you can enable the security manager by adding the following code snippet to <span class="code">${JMETER_HOME}/bin/setenv.sh</span>:</p>
  
<pre class="source">JVM_ARGS=" \
   -Djava.security.manager \
   -Djava.security.policy=${JMETER_HOME}/bin/java.policy \
   -Djmeter.home=${JMETER_HOME} \
"</pre>
  
<p>The JVM will now add the policies defined in the file <span class="code">${JMETER_HOME}/bin/java.policy</span> to the possibly globally defined policies. If you want your definition to be the only source for policies, use two equal signs instead of one when setting the property <span class="code">java.security.policy</span>.</p>
  
<p>The policies will be dependent upon your use case and it might take a while to find the correct restricted and allowed actions. Java can help you find the needed policies with the property <span class="code">java.security.debug</span>. Set it to <span class="code">access</span> and it will log all permissions, that it gets asked to allow. Simply add the following line to your <span class="code">setenv.sh</span>:</p>
  
<pre class="source">JVM_ARGS="${JVM_ARGS} -Djava.security.debug=access"</pre>
  
<p>It might look a bit strange, that we define a Java system property <span class="code">jmeter.home</span> with the value of <span class="code">${JMETER_HOME}</span>. This variable will be used in the example <span class="code">java.policy</span> to limit the file system access and allow it only to read JMeters configuration and libraries and restrict write access to specific locations, only.</p>
  
<p>The following policy definition file has been used for a simple remote test. You will probably have to tweak the policies, when you run more complex scenarios. The test plans are somewhere placed inside the users home directory under a directory called <span class="code">jmeter-testplans</span>. The sample <span class="code">java.policy</span> looks like:</p>
  
<pre class="source">
grant codeBase "file:${jmeter.home}/bin/*" {
  permission java.security.AllPermission;
};

grant codeBase "file:${jmeter.home}/lib/jorphan.jar" {
  permission java.security.AllPermission;
};

grant codeBase "file:${jmeter.home}/lib/log4j-api-2.11.1.jar" {
  permission java.security.AllPermission;
};

grant codeBase "file:${jmeter.home}/lib/log4j-slf4j-impl-2.11.1.jar" {
  permission java.security.AllPermission;
};

grant codeBase "file:${jmeter.home}/lib/slf4j-api-1.7.25.jar" {
  permission java.security.AllPermission;
};

grant codeBase "file:${jmeter.home}/lib/log4j-core-2.11.1.jar" {
  permission java.security.AllPermission;
};

grant codeBase "file:${jmeter.home}/lib/ext/*" {
  permission java.security.AllPermission;
};

grant codeBase "file:${jmeter.home}/lib/httpclient-4.5.6.jar" {
  permission java.net.SocketPermission "*", "connect,resolve";
};

grant codeBase "file:${jmeter.home}/lib/darcula.jar" {
  permission java.lang.RuntimePermission "modifyThreadGroup";
};

grant codeBase "file:${jmeter.home}/lib/xercesImpl-2.12.0.jar" {
  permission java.io.FilePermission "${java.home}/lib/xerces.properties", "read";
};

grant codeBase "file:${jmeter.home}/lib/groovy-all-2.4.15.jar" {
  permission groovy.security.GroovyCodeSourcePermission "/groovy/script";
  permission java.lang.RuntimePermission "accessClassInPackage.sun.reflect";
  permission java.lang.RuntimePermission "getProtectionDomain";
};

grant {
  permission java.io.FilePermission "${jmeter.home}/backups", "read,write";
  permission java.io.FilePermission "${jmeter.home}/backups/*", "read,write,delete";
  permission java.io.FilePermission "${jmeter.home}/bin/upgrade.properties", "read";
  permission java.io.FilePermission "${jmeter.home}/lib/ext/-", "read";
  permission java.io.FilePermission "${jmeter.home}/lib/ext", "read";
  permission java.io.FilePermission "${jmeter.home}/lib/-", "read";
  permission java.io.FilePermission "${user.home}/jmeter-testplans/-", "read,write";
  permission java.io.SerializablePermission "enableSubclassImplementation";
  permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
  permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.dynalink.support";
  permission java.lang.RuntimePermission "accessClassInPackage.sun.awt";
  permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
  permission java.lang.RuntimePermission "accessClassInPackage.sun.swing";
  permission java.lang.RuntimePermission "accessDeclaredMembers";
  permission java.lang.RuntimePermission "createClassLoader";
  permission java.lang.RuntimePermission "createSecurityManager";
  permission java.lang.RuntimePermission "getClassLoader";
  permission java.lang.RuntimePermission "getenv.*";
  permission java.lang.RuntimePermission "nashorn.createGlobal";
  permission java.util.PropertyPermission "*", "read";
};
  </pre>
  
<div class="clear"></div>
<div class="note">The usage of <span class="code">java.security.AllPermission</span> is an easy way to make your test plans work, but it might be a dangerous shortcut on your path to security.</div>
<div class="clear"></div>

</div>


</div>
<ul class="pagelinks">
<li>
<a href="listeners.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="generating-dashboard.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;
            2019
            , 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>
