---
title: start
---

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

Start servers, locators, gateway senders and gateway receivers, and monitoring tools.

-   **[start gateway-receiver](#topic_67738A5B68E84DEE95D1C92DAB2E26E5)**

    Start the gateway receiver on a given member or group of members.

-   **[start gateway-sender](#topic_AB8BA3F42B9645A8BE9BD97CE2F839A8)**

    Start the gateway sender on a member or members.

-   **[start jconsole](#topic_D00507416F3944DFAB48D2FA2B9E4A31)**

    Start the JDK JConsole monitoring application in a separate process.

-   **[start jvisualvm](#topic_5B5BF8BEE905463D8B7762B89E2D65E7)**

    Start the JDK's Java VisualVM monitoring application in a separate process.

-   **[start locator](#topic_591260CF25D64562A0EDD7260D2AC6D4)**

    Start a locator.

-   **[start pulse](#topic_E906BA7D9E7F4C5890FEFA7ECD40DD77)**

    Launch the <%=vars.product_name%> Pulse monitoring dashboard tool in the user's default system browser and navigates the user to the landing page (login page).

-   **[start server](#topic_3764EE2DB18B4AE4A625E0354471738A)**

    Start a <%=vars.product_name%> cache server process.

## <a id="topic_67738A5B68E84DEE95D1C92DAB2E26E5" class="no-quick-link"></a>start gateway-receiver

Start the gateway receiver on a given member or group of members.

Note that you can only have one gateway receiver on each member, and unlike a gateway sender, you do not need to specify an identifier for the gateway receiver.

**Availability:** Online. You must be connected in `gfsh` to a JMX Manager member to use this command.

**Syntax:**

``` pre
start gateway-receiver [--groups=value(,value)*] [--members=value(,value)*]
```
**Parameters, start gateway-receiver**

| Name          | Description                                                         |
|---------------|---------------------------------------------------------------------|
| &#8209;&#8209;members | Name or ID of the member(s) on which to start the Gateway Receiver. |
| &#8209;&#8209;groups  | Group(s) of members on which to start the Gateway Receiver.         |


**Example Commands:**

``` pre
start gateway-receiver
start gateway-receiver --members=member1
```

**Sample Output:**

``` pre
gfsh>start gateway-receiver
      Member                | Result | Message
--------------------------- | -------| -----------------------------------------------------------------------
pc13(2266)<v6>:56852        | OK     | GatewayReceiver is started on member pc13(2266)<v6>:56852
pc13(Manager:2242)<v5>:57631| Error  | GatewayReceiver is not available on member pc13(Manager:2242)<v5>:57631
pc13(2275)<v7>:47480        | OK     | GatewayReceiver is started on member pc13(2275)<v7>:47480
pc13(2293)<v8>:55472        | OK     | GatewayReceiver is started on member pc13(2293)<v8>:55472

gfsh>start gateway-receiver --members=pc13(2266)<v14>:36579
GatewayReceiver is started on member pc13(2266)<v14>:36579

gfsh>start gateway-receiver --group=RG1
         Member      | Result | Message
-------------------- | -------| ----------------------------------------------------------
pc13(2275)<v23>:27484| OK     | GatewayReceiver is started on member pc13(2275)<v23>:27484
pc13(2293)<v24>:55810| OK     | GatewayReceiver is started on member pc13(2293)<v24>:55810
pc13(2266)<v22>:4522 | OK     | GatewayReceiver is started on member pc13(2266)<v22>:4522
```

## <a id="topic_AB8BA3F42B9645A8BE9BD97CE2F839A8" class="no-quick-link"></a>start gateway-sender

Start the gateway sender on a member or members.

For information on how to configure a gateway sender, see [Configure Gateway Senders](../../../topologies_and_comm/multi_site_configuration/setting_up_a_multisite_system.html#setting_up_a_multisite_system__section_1500299A8F9A4C2385680E337F5D3DEC).

Note: By default, gateway senders are configured to start automatically. Manual restart introduces a risk of data loss; it is not intended for production systems.

**Availability:** Online. You must be connected in `gfsh` to a JMX Manager member to use this command.

**Syntax:**

``` pre
start gateway-sender --id=value [--groups=value(,value)*] [--members=value(,value)*] [--clean-queues(=value)]
```
**Parameters, start gateway-sender**

| Name         | Description    | Default Value |
|--------------|----------------|---------------|
| &#8209;&#8209;id           | *Required.* ID of the GatewaySender.                      | |
| &#8209;&#8209;groups       | Group(s) of members on which to start the Gateway Sender. | |
| &#8209;&#8209;members      | Member(s) on which to start the Gateway Sender. | |
| &#8209;&#8209;clean-queues | Option to clean existing queue at start of the Gateway Sender. This option is only applicable for Gateway Senders with enabled persistence. | false |

**Example Commands:**

``` pre
start gateway-sender --id=sender1-NY
start gateway-sender --id=sender1-NY --members=server1
start gateway-sender --id=sender1-NY --groups=MemberGroup1,MemberGroup2
start gateway-sender --id=sender1-NY --clean-queues
```

**Sample Output:**

``` pre
gfsh>start gateway-sender --id=ln
 Member                       |  Result |                   Message
------------------------------| ------- | -------------------------------------------------------------------------
pc13(30614)<v6>:63670         | OK      | GatewaySender ln is started on member pc13(30614)<v6>:63670
pc13(30621)<v7>:36015         | OK      | GatewaySender ln is started on member pc13(30621)<v7>:36015
pc13(30633)<v8>:13633         | OK      | GatewaySender ln is started on member pc13(30633)<v8>:13633
pc13(Manager:30588)<v5>:42792 | Error   | GatewaySender ln is not available on member pc13(Manager:30588)<v5>:42792

gfsh>start gateway-sender --id=ln --members=pc13(30614)<v14>:44519
GatewaySender ln is started on member pc13(30614)<v14>:44519
gfsh>start gateway-sender --id=ln --groups=SenderGroup1
Member                 | Result| Message
---------------------- | ------| ------------------------------------------------------------
pc13(30614)<v18>:15201 | OK    | GatewaySender ln is started on member pc13(30614)<v18>:15201
pc13(30621)<v19>:61437 | OK    | GatewaySender ln is started on member pc13(30621)<v19>:61437
pc13(30633)<v20>:22567 | OK    | GatewaySender ln is started on member pc13(30633)<v20>:22567
```

## <a id="topic_D00507416F3944DFAB48D2FA2B9E4A31" class="no-quick-link"></a>start jconsole

Start the JDK JConsole monitoring application in a separate process.

JConsole automatically connects to a running JMX Manager node if one is available.

Note that you must have a JDK installed (not just a JRE) and the correct PATH and JAVA\_HOME environment variables set.

See [Browsing <%=vars.product_name%> MBeans through JConsole](../../../managing/management/mbeans_jconsole.html) for an example of using JConsole with the <%=vars.product_name%> management and monitoring system.

**Availability:** Online or offline.

**Syntax:**

``` pre
start jconsole [--interval=<seconds>] [--notile] [--version]
[--J<jconsole JVM options>]
```

**Parameters, start jconsole**

| Name             | Description    | Default Value |
|------------------|----------------|---------------|
| &#8209;&#8209;interval   | Set the update interval to n seconds (default is 4 seconds). (Equivalent to JConsole's `-interval=n`) | 4 |
| &#8209;&#8209;notile     | Whether to initially tile windows for two or more connections. This parameter is passed as `-notile` to JConsole. | false |
| &#8209;&#8209;pluginpath | Directories or JAR files which are searched for JConsole plugins. The path should contain a provider-configuration file named:`META-INF/services/com.sun.tools.jconsole.JConsolePlugin` containing one line for each plugin specifying the fully qualified class name of the class implementing the `com.sun.tools.jconsole.JConsolePlugin` class. | |
| &#8209;&#8209;version    | Display the JConsole version information. This parameter is passed as `-version` to JConsole. | false |
| &#8209;&#8209;J          | Arguments passed to the JVM on which JConsole runs | |

**Example Commands:**

``` pre
gfsh>start jconsole --interval=8 --notile;
Running JDK JConsole

gfsh>start jconsole --version;
JConsole version "1.8.0_31-b01-1"
Java(TM) SE Runtime Environment (build 1.8.0_31-b01-1-11)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01-11, mixed mode)
```

**Sample Output:**

``` pre
gfsh>start jconsole
Running JDK JConsole
```

The JConsole application appears and auto-connects to a JMX Manager node if one is available:

<img src="../../../images/JConsole.png" id="topic_D00507416F3944DFAB48D2FA2B9E4A31__image_AAB6A784AD4B4BD1B5155AC796C22F82" class="image imagecenter" />

**Error Messages:**

``` pre
An error occurred while launching JConsole = %1$s

Connecting by the <%=vars.product_name%> member's name or ID is not currently supported.
Please specify the member as '<hostname|IP>[PORT].

An IO error occurred while launching JConsole.
Please ensure that JAVA_HOME is set to the JDK installation
or the JDK bin directory is in the system PATH.

JConsole could not be found.\nPlease ensure that JAVA_HOME is set to the
JDK installation or the JDK bin directory is in the system PATH.
```

## <a id="topic_5B5BF8BEE905463D8B7762B89E2D65E7" class="no-quick-link"></a>start jvisualvm

Start the JDK's Java VisualVM monitoring application in a separate process.

**Availability:** Online or offline.

**Syntax:**

``` pre
start jvisualvm [--J=value(,value)*]
```

**Parameters, start jvisualvm**

| Name       | Description |
|------------|-------------|
| &#8209;&#8209;J    | VM-option passed to the spawned CacheServer VM.<br/>For example: `--J=-Dfoo.bar=true` for setting foo.bar to 'true'. |

**Example Commands:**

``` pre
start jvisualvm
```

**Sample Output:** <img src="../../../images/jvisualvm.png" id="topic_5B5BF8BEE905463D8B7762B89E2D65E7__image_BDA0F3A31F784C5FBBB5999EDA2BD942" class="image" />

## <a id="topic_591260CF25D64562A0EDD7260D2AC6D4" class="no-quick-link"></a>start locator

Start a locator.

The command creates a subdirectory and log file named after the locator. If the locator detects that no other JMX Manager exists, then the locator will automatically start an embedded JMX Manager and connect the current `gfsh` session to the JMX Manager.

**Note:** You must have `JAVA_HOME` set before starting gfsh to use this command.

In addition, if gfsh is not already connected to a JMX Manager, the gfsh console will automatically connect to the new embedded JMX Manager started by the new locator.

**Note:** When both `--max-heap` and `--initial-heap` are specified during locator startup, additional GC parameters are specified internally by <%=vars.product_name%>'s Resource Manager. If you do not want the additional default GC properties set by the Resource Manager, then use the`-Xms` and `-Xmx` JVM options. See [Controlling Heap Use with the Resource Manager](../../../managing/heap_use/heap_management.html#configuring_resource_manager) for more information.

**Note:** The additional GC parameters introduced by the `--max-heap` option are not compatible with the usage of G1 garbage collector.

**Availability:** Online or offline.

**Syntax:**

``` pre
start locator --name=value [--bind-address=value] [--force(=value)]
 [--groups=value(,value)*] [--hostname-for-clients=value] [--classpath=value]
 [--locators=value] [--log-level=value] [--mcast-address=value] [--mcast-port=value] [--port=value] [--dir=value]
 [--properties-file=value] [--security-properties-file=value] [--initial-heap=value] [--max-heap=value]
 [--connect(=value)] [--enable-cluster-configuration(=value)] [--load-cluster-configuration-from-dir(=value)]
 [--cluster-config-dir=value] [--redirect-output(=value)]
 [--http-service-port=value] [--http-service-bind-address=value] 
 [--J=value(,value)*]
```

**Parameters, start locator**

| Name         | Description    | Default Value |
|--------------|----------------|---------------|
| &#8209;&#8209;name                                | Name to be used for this <%=vars.product_name%> locator service. If not specified, gfsh generates a random name. | |
| &#8209;&#8209;bind-address                        | IP address on which the locator will be bound. | bind to all addresses |
| &#8209;&#8209;force                               | Whether to allow the PID file from a previous locator run to be overwritten. | false |
| &#8209;&#8209;groups                              | Group(s) the locator will be a part of. | |
| &#8209;&#8209;hostname-for-clients                | Host name or IP address that will be sent to clients so they can connect to this locator. | uses `bind-address` |
| &#8209;&#8209;classpath                           | Application classes to be added to the locator's CLASSPATH after the core jar file. See <a href="../../../getting_started/setup_classpath.html">Setting Up the CLASSPATH</a> for details. | |
| &#8209;&#8209;locators                            | List of locators used by this locator to join the appropriate <%=vars.product_name%> cluster. | |
| &#8209;&#8209;log-level                           | Level of output logged to the locator log file. Possible values for log-level include: <code>ALL</code>, <code>TRACE</code>, <code>DEBUG</code>, <code>INFO</code>, <code>WARN</code>, <code>ERROR</code>, <code>FATAL</code>, <code>OFF</code>. | |
| &#8209;&#8209;mcast-address                       | IP address or hostname used to bind the UPD socket for multi-cast networking so the locator can locate other members in the <%=vars.product_name%> cluster. If mcast-port is zero, then mcast-address is ignored. | |
| &#8209;&#8209;mcast-port                          | Port used for multi-cast networking so the locator can locate other members of the <%=vars.product_name%> cluster. A zero value disables mcast. | |
| &#8209;&#8209;port                                | Port the locator will listen on. | 10334 |
| &#8209;&#8209;dir                                 | Directory in which the Locator will be started and run. | `./<locator-member-name>` |
| &#8209;&#8209;properties-file                     | Specify the `gemfire.properties` file for configuring the locator's cluster. The file's path should be absolute or relative to gfsh's working directory. | |
| &#8209;&#8209;security-properties-file            | The `gfsecurity.properties` file for configuring the Locator's security configuration in the cluster. The file's path can be absolute or relative to gfsh's working directory. | |
| &#8209;&#8209;initial-heap                        | Size has the same format as the `-Xmx`/`-Xms` JVM options. <p><b>Note:</b> If you use the `-J-Xms` and `-J-Xmx` JVM properties instead of `-initial-heap` and `-max-heap`, then <%=vars.product_name%> does not use default JVM resource management properties. If you use the JVM properties, you must then specify all properties manually for eviction, garbage collection, heap percentage, and so forth.</p> | |
| &#8209;&#8209;max-heap                            | Size has the same format as the `-Xmx`/`-Xms` JVM options. <p><b>Note:</b> If you use the `-J-Xms` and `-J-Xmx` JVM properties instead of `-initial-heap` and `-max-heap`, then <%=vars.product_name%> does not use default JVM resource management properties. If you use the JVM properties, you must then specify all properties manually for eviction, garbage collection, heap percentage, and so forth.</p><p><b>Note:</b> The additional GC parameters introduced by the `-max-heap` option are not compatible with the usage of G1 garbage collector.</p> | |
| &#8209;&#8209;connect                             | When connect is set to false, gfsh does not automatically connect to the locator which is started using this command. | true |
| &#8209;&#8209;enable-cluster-configuration        | Enables cluster configuration behavior where locators maintain configurations for all members of the cluster.<br/>See <a href="../../../configuring/cluster_config/gfsh_persist.html">Overview of the Cluster Configuration Service</a>. | true |
| &#8209;&#8209;load-cluster-configuration-from-dir | <b>Deprecated. Use `gfsh import cluster-configuration` for this functionality.</b><br/> Loads the cluster configuration from the `shared-config` directory. (When set to false, the configuration is loaded from the disk store of the internal, persistent region used by the locator to persist the configuration.) | false |
| &#8209;&#8209;cluster-config-dir                  | Directory used by the cluster configuration service to store the cluster configuration on the filesystem | cluster-config |
| &#8209;&#8209;redirect-output                     | When true, redirect standard output and standard error to the locator log file. If specified without a value, the value is set to true. | false |
| &#8209;&#8209;http-service-port                   | Specifies the HTTP service port. | 7070 |
| &#8209;&#8209;http-service-bind-address           | Specifies the IP address to which the HTTP service will be bound. | the local host machine's address |
| &#8209;&#8209;J                                   | Argument passed to the JVM on which the Locator will run. For example, specifying `--J=-Dfoo.bar=true` sets property &quot;foo.bar&quot; to &quot;true&quot;.<p><b>Note:</b> If the argument you are passing contains spaces or commas, enclose the option in single quotes. For example:<br/>`start locator --name=locator1 --port=9009 --mcast-port=0 --J='-Dgemfire.remote-locators=192.0.2.0[9009],192.0.2.1[9009]'`</p> | none |


**Example Commands:**

``` pre
start locator --name=locator1
```

## <a id="topic_E906BA7D9E7F4C5890FEFA7ECD40DD77" class="no-quick-link"></a>start pulse

Launch the <%=vars.product_name%> Pulse monitoring dashboard tool in the user's default system browser and navigates the user to the landing page (login page).

For more information on <%=vars.product_name%> Pulse, see [<%=vars.product_name%> Pulse](../../pulse/pulse-overview.html).

**Availability:** Online or offline.

**Syntax:**

``` pre
start pulse [--url=value]
```

**Parameters, start pulse**

| Name         | Description    | Default Value |
|--------------|----------------|---------------|
| &#8209;&#8209;url    | URL of the Pulse Web application | `http://localhost:7070/pulse` |

**Example Commands:**

``` pre
start pulse
start pulse --url=http://gemfire.example.com:7070/pulse
```

**Sample Output:**

```
Launched Geode Pulse
```


## <a id="topic_3764EE2DB18B4AE4A625E0354471738A" class="no-quick-link"></a>start server

Start a <%=vars.product_name%> cache server process.

**Note:** When both `--max-heap` and `--initial-heap` are specified during server startup, additional GC parameters are specified on your behalf. If you do not want the additional default GC properties set, then use the `-Xms` and `-Xmx` JVM options to set just these parameters. See [Controlling Heap Use with the Resource Manager](../../../managing/heap_use/heap_management.html#configuring_resource_manager) for more information.

**Note:** The additional GC parameters introduced by the `--max-heap` option are not compatible with the usage of G1 garbage collector.

**Availability:** Online or offline.

**Syntax:**

``` pre
start server --name=value [--assign-buckets(=value)] [--bind-address=value]
    [--cache-xml-file=value] [--classpath=value] [--disable-default-server(=value)]
    [--disable-exit-when-out-of-memory(=value)] [--enable-time-statistics(=value)]
    [--force(=value)] [--include-system-classpath(=value)] [--properties-file=value]
    [--security-properties-file=value] [--groups=value(,value)*]
    [--locators=value] [--locator-wait-time=value] [--log-level=value]
    [--mcast-address=value] [--mcast-port=value] [--memcached-port=value]
    [--memcached-protocol=value] [--rebalance(=value)] [--server-bind-address=value]
    [--server-port=value] [--spring-xml-location=value]
    [--statistic-archive-file=value] [--dir=value] [--initial-heap=value]
    [--max-heap=value] [--use-cluster-configuration(=value)] [--J=value(,value)*]
    [--critical-heap-percentage=value] [--critical-off-heap-percentage=value]
    [--eviction-heap-percentage=value] [--eviction-off-heap-percentage=value]
    [--hostname-for-clients=value] [--max-connections=value]
    [--message-time-to-live=value] [--max-message-count=value] [--max-threads=value]
    [--socket-buffer-size=value] [--lock-memory=value] [--off-heap-memory-size=value]
    [--start-rest-api=value] [--redirect-output(=value)]
    [--http-service-port=value] [--http-service-bind-address=value]
    [--username=value] [--password=value]
```

**Parameters, start server**

| Name         | Description    | Default Value |
|--------------|----------------|---------------|
| &#8209;&#8209;name                            | Member name for this server. If not specified, gfsh generates a random name. | |
| &#8209;&#8209;assign-buckets                  | Whether to assign buckets to the partitioned regions of the cache on server start. | false |
| &#8209;&#8209;bind-address                    | The IP address on which the server will be bound. | binds to all local addresses |
| &#8209;&#8209;cache-xml-file                  | Specifies the name of the XML file or resource to initialize the cache with when it is created. | |
| &#8209;&#8209;classpath                       | Application classes to be added to the server's CLASSPATH after the core jar file.<br/>See <a href="../../../getting_started/setup_classpath.html">Setting Up the CLASSPATH</a> for details. | |
| &#8209;&#8209;include-system-classpath        | When true, include the System CLASSPATH on the Server's CLASSPATH, as the System CLASSPATH is not included by default. If specified without a value, the value is set to true. | false |
| &#8209;&#8209;disable-default-server          | Whether the cache server will be started by default. If the parameter is specified without a value, the value is set to true. If set to true, the cache server acts as a peer. | false |
| &#8209;&#8209;disable-exit-when-out-of-memory | Prevents the JVM from exiting when an OutOfMemoryError occurs. | false |
| &#8209;&#8209;enable-time-statistics          | Causes additional time-based statistics to be gathered for <%=vars.product_name%> operations. | true |
| &#8209;&#8209;properties-file                 | The `gemfire.properties` file for configuring the server's cluster. The file's path can be absolute or relative to the gfsh working directory. | |
| &#8209;&#8209;security-properties-file        | The `gfsecurity.properties` file for configuring the server's security configuration in the cluster. The file's path can be absolute or relative to gfsh directory. | |
| &#8209;&#8209;groups                          | Group(s) the Cache Server will be a part of. | |
| &#8209;&#8209;force                           | Whether to allow the PID file from a previous Cache Server run to be overwritten. | false |
| &#8209;&#8209;locators                        | Sets the list of locators used by the Cache Server to join the appropriate <%=vars.product_name%> cluster. | |
| &#8209;&#8209;locator-wait-time               | Sets the number of seconds the server will wait for a locator to become available during startup before giving up. | 0 |
| &#8209;&#8209;log-level                       | Sets the level of output logged to the Cache Server log file. Possible values for log-level include: <code>ALL</code>, <code>TRACE</code>, <code>DEBUG</code>, <code>INFO</code>, <code>WARN</code>, <code>ERROR</code>, <code>FATAL</code>, <code>OFF</code>. | |
| &#8209;&#8209;mcast-address                   | The IP address or hostname used to bind the UDP socket for multi-cast networking so the Cache Server can locate other members in the <%=vars.product_name%> cluster. If mcast-port is zero, then mcast-address is ignored. | |
| &#8209;&#8209;mcast-port                      | Sets the port used for multi-cast networking so the Cache Server can locate other members of the <%=vars.product_name%> cluster. A zero value disables mcast. | |
| &#8209;&#8209;memcached-port                  | If specified and is non-zero, sets the port number for an embedded Gemcached server and starts the Gemcached server. | |
| &#8209;&#8209;memcached-protocol              | Sets the protocol used by an embedded Gemcached server. Valid values are `BINARY` and `ASCII`. If you omit this property, the ASCII protocol is used. | |
| &#8209;&#8209;server-bind-address             | Overrides the `bind-address` on which this server will listen for client connections. Set this option in a multi-homed server environment to distinguish communications from clients. Setting a value of the empty string (&quot;&quot;) uses the value of `bind-address`. | value of `bind-address` |
| &#8209;&#8209;server-port                     | Port the Server will listen on for client connections. | 40404 |
| &#8209;&#8209;spring-xml-location             | Specifies the location of a Spring XML configuration file(s) for bootstrapping and configuring a <%=vars.product_name%> Server. This configuration file can exist on the CLASSPATH (default) or any location supported by Spring's Resource(Loader) location specifiers (for example, classpath:, file:, etc).<br/>ResourceLoader is described in the <a href="http://docs.spring.io/spring/docs/4.0.9.RELEASE/spring-framework-reference/htmlsingle/#resources-resourceloader">Spring documentation</a>. | |
| &#8209;&#8209;rebalance                       | Whether to initiate rebalancing across the <%=vars.product_name%> cluster. | false |
| &#8209;&#8209;dir                             | Specify the directory in which the server will run in. This directory is written to the location where you started `gfsh`.| If not specified, the directory is named after the server. |
| &#8209;&#8209;statistic-archive-file          | The file that statistic samples are written to. For example: &quot;StatisticsArchiveFile.gfs&quot;. Must be defined to store the archiving to a file. An empty string (default) disables statistic archival. | not set |
| &#8209;&#8209;initial-heap                    | Initial size of the heap in the same format as the JVM -Xms parameter.<p><b>Note:</b> If you use the `--J=-Xms` and `--J=-Xmx` JVM properties instead of `--initial-heap` and `--max-heap`, then <%=vars.product_name%> does not use default JVM resource management properties. If you use the JVM properties, you must then specify all properties manually for eviction, garbage collection, heap percentage, and so forth.</p> | |
| &#8209;&#8209;max-heap                        | Maximum size of the heap in the same format as the JVM -Xmx parameter.<p><b>Note:</b> If you use the `--J=-Xms` and `--J=-Xmx` JVM properties instead of `--initial-heap` and `--max-heap`, then <%=vars.product_name%> does not use default JVM resource management properties. If you use the JVM properties, you must then specify all properties manually for eviction, garbage collection, heap percentage, and so forth.</p><p><b>Note:</b> The additional GC parameters introduced by the `--max-heap` option are not compatible with the usage of G1 garbage collector.</p>| |
| &#8209;&#8209;J                               | Argument passed to the JVM on which the Cache Server will run. For example, `--J=-Dfoo.bar=true` will set the property &quot;foo.bar&quot; to &quot;true&quot;.<p>If the argument you are passing contains spaces or commas, enclose the option in single quotes.</p> | |
| &#8209;&#8209;use-cluster-configuration       | Specifies whether the server requests a cluster configuration from the locator.<p>See <a href="../../../configuring/cluster_config/gfsh_persist.html">Overview of the Cluster Configuration Service</a>.</p>| true |
| &#8209;&#8209;critical-heap-percentage        | Set the percentage of heap at or above which the cache is considered in danger of becoming inoperable due to garbage collection pauses or out of memory exceptions. Past the threshold, operations that require heap space will throw a `LowMemoryException`. This feature requires additional VM flags to perform properly; you must set `--initial-heap` and `--max-heap` or the corresponding JVM properties to use this threshold. You must also set `--max-heap` and `--initial-heap` to the same value.</p>|0 (no critical heap threshold enforced)|
| &#8209;&#8209;critical-off-heap-percentage    | The percentage of off-heap memory used at or above which the cache is considered in danger of becoming inoperable due to out of memory exceptions. Past the threshold, operations that require heap space will throw a `LowMemoryException`.|0 (no critical off-heap threshold enforced)|
| &#8209;&#8209;eviction-heap-percentage        | Set the percentage of heap at or above which the eviction should begin on Regions configured for HeapLRU eviction. Changing this value may cause eviction to begin immediately. Only one change to this attribute or critical heap percentage will be allowed at any given time and its effect will be fully realized before the next change is allowed. This feature requires additional VM flags to perform properly; you must set `--initial-heap` and `--max-heap` or the corresponding JVM properties to use this threshold. You must also set `--max-heap` and `--initial-heap` to the same value.| <ul><li>0, if no region is configured with heap eviction</li><li>If `critical-heap-percentage` is set to a non-zero value, 5% less than that value.</li><li>80%, if `critical-heap-percentage` is not configured.</li></ul>|
| &#8209;&#8209;eviction-off-heap-percentage    | The percentage of off-heap memory used at or above which the eviction should begin on regions configured for off-heap and HeapLRU eviction. Changing this value may cause eviction to begin immediately. Only one change to this attribute or critical off-heap percentage will be allowed at any given time, and its effect will be fully realized before the next change is allowed.|<ul><li>0, if no region is configured with heap eviction</li><li>If `critical-off-heap-percentage` is set to a non-zero value, 5% less than that value.</li><li>80%, if `critical-off-heap-percentage` is not configured.</li></ul>|
| &#8209;&#8209;hostname-for-clients            | Sets the IP address or host name that a locator will provide to clients. Clients use the address to connect to a server. Set this value when clients use a different address to connect with the server than the `bind-address`, as those clients might with servers in a private cloud or multi-homed environment. Not specifying this option or setting this option to the empty string (&quot;&quot;) causes the `bind-address` to be given to clients.| |
| &#8209;&#8209;max-connections                 | Sets the maximum number of client connections allowed. When the maximum is reached the cache server will stop accepting connections. | |
| &#8209;&#8209;message-time-to-live            | Sets the time (in seconds ) after which a message in the client queue will expire. | |
| &#8209;&#8209;max-message-count               | Sets maximum number of messages that can be enqueued in a client-queue.| |
| &#8209;&#8209;max-threads                     | Sets the maximum number of threads allowed in this cache server to service client requests. The default of 0 causes the cache server to dedicate a thread for every client connection. When client-server TLS/SSL is configured, values other than the default are not supported. | |
| &#8209;&#8209;socket-buffer-size              | Sets the buffer size in bytes of the socket connection for this CacheServer. The default is 32768 bytes.| |
| &#8209;&#8209;lock-memory                     | (Linux only) When true, the member's heap and off-heap memory are locked in RAM, preventing them from being paged to disk. You must increase the related `ulimit` operating system resource to allow the OS to lock memory chunks of sufficient size.| false |
| &#8209;&#8209;off-heap-memory-size            | The integer quantity of off-heap memory to be used for storing region values. Specified in Gigabytes with a "g" suffix, or Megabytes with an "m" suffix. For example, allocate a 2 Gigabyte off-heap space with `--off-heap-memory-size=2g`. The default value of 0 does not use any off-heap memory.| 0 |
| &#8209;&#8209;start-rest-api                  | When true, starts the REST API service. | false |
| &#8209;&#8209;redirect-output                 | When true, redirect standard output and standard error to the server log file. If specified without a value, the value is set to true. | false |
| &#8209;&#8209;http-service-port               | Specifies the HTTP service port. | 7070 |
| &#8209;&#8209;http-service-bind-address       | Specifies the IP address to which the HTTP service will be bound. | the local host machine's address |
| &#8209;&#8209;username<br />&#8209;&#8209;user        | The user name of the credential to use in authenticating to the cluster. When specified, if the `--password` option is not also specified, then `gfsh` will prompt for the password.| |
| &#8209;&#8209;password                        | The password portion of the credential to use in authenticating to the cluster. | |


### <a id="topic_3764EE2DB18B4AE4A625E0354471738A__section_A50120613D3C4A848463236C4EFF18C7" class="no-quick-link"></a>Examples

``` pre
gfsh>start server --name=server1
gfsh>start server --name=server2 --server-port=40405
```
