---
title:  System Properties
---

<!--
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.
-->

A variety of system properties can be specified when a client connects to a distributed system, either programmatically or in a `geode.properties` file.
See `apache::geode::client::SystemProperties` in the [C++ API docs](cppdocs).

The following settings can be configured:

-   **[General Properties](#general_props)**<br />Basic information for the process, such as cache creation parameters.
-   **[Logging Properties](#attributes-gfcpp__table_logging_props)**<br />How and where to log system messages.
-   **[Statistics Archiving Properties](#attributes-gfcpp__table_statistic_props)**<br />How to collect and archive statistics information.
-   **[Durable Client Properties](#attributes-gfcpp__table_durable_client_props)**<br />Information about the durable clients connected to the system.
-   **[System Properties for Client Authentication and Authorization](#attributes-gfcpp__table_security_props)**<br /> Information about various security parameters.
-   **[System Properties for High Availability](#attributes-gfcpp__table_high_availability_props)**<br />System properties to configure periodic acknowledgment (ack).

The following tables list attributes that can be specified programmatically or stored in the `geode.properties` file to be read by a client.

### <a id="general_props" class="no-quick-link"></a>General Properties

<table>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="even">
<td>cache-xml-file</td>
<td>Name and path of the file whose contents are used by default to configure a cache if one is
created. If not specified, the client starts with an empty cache, which is populated at run time.
</td>
<td>no default</td>
</tr>
<tr class="odd">
<td>heap-lru-delta</td>
<td>
The percentage of entries the system will evict each time it detects that it has exceeded the heap-lru-limit.
This property is used only if <code class="ph codeph">heap-lru-limit</code> is greater than 0.</td>
<td>10 %</td>
</tr>
<tr class="even">
<td>heap-lru-limit</td>
<td>Maximum amount of memory, in megabytes, used by the cache for all regions. If this limit is exceeded by <code class="ph codeph">heap-lru-delta</code> percent, LRU reduces the memory footprint as necessary. If not specified, or set to 0, memory usage is governed by each region's LRU entries limit, if any.</td>
<td>0</td>
</tr>
<tr class="odd">
<td>conflate-events</td>
<td>Client side conflation setting, which is sent to the server.</td>
<td>server</td>
</tr>
<tr class="even">
<td>connect-timeout</td>
<td>Amount of time (in seconds) to wait for a response after a socket connection attempt.</td>
<td>59</td>
</tr>
<tr class="odd">
<td>connection-pool-size</td>
<td>Number of connections per endpoint</td>
<td>5</td>
</tr>
<tr class="odd">
<td>enable-chunk-handler-thread</td>
<td>If the chunk-handler-thread is operative (enable-chunk-handler=true), it processes the response for each application thread. 
When the chunk handler is not operative (enable-chunk-handler=false), each application thread processes its own response.</td>
<td>false</td>
</tr>
<tr class="even">
<td>disable-shuffling-of-endpoints</td>
<td>If true, prevents server endpoints that are configured in pools from being shuffled before use.</td>
<td>false</td>
</tr>
<tr class="even">
<td>max-fe-threads</td>
<td>Thread pool size for parallel function execution. An example of this is the GetAll operations.</td>
<td>2 * number of logical processors</td>
</tr>
<tr class="odd">
<td>max-socket-buffer-size</td>
<td>Maximum size of the socket buffers, in bytes, that the client will try to set for client-server connections.</td>
<td>65 * 1024</td>
</tr>
<tr class="even">
<td>notify-ack-interval</td>
<td>Interval, in seconds, in which client sends acknowledgments for subscription notifications.</td>
<td>1</td>
</tr>
<tr class="odd">
<td>notify-dupcheck-life</td>
<td>Amount of time, in seconds, the client tracks subscription notifications before dropping the duplicates.</td>
<td>300</td>
</tr>
<tr class="even">
<td>ping-interval</td>
<td>Interval, in seconds, between communication attempts with the server to show the client is alive. Pings are only sent when the <code class="ph codeph">ping-interval</code> elapses between normal client messages. This must be set lower than the server's <code class="ph codeph">maximum-time-between-pings</code>.</td>
<td>10</td>
</tr>
<tr class="odd">
<td>redundancy-monitor-interval</td>
<td>Interval, in seconds, at which the subscription HA maintenance thread checks for the configured redundancy of subscription servers.</td>
<td>10</td>
</tr>
<tr class="odd">
<td>tombstone-timeout</td>
<td>Time in milliseconds used to timeout tombstone entries when region consistency checking is enabled.
</td>
<td>480000</td>
</tr>
</tbody>
</table>


### <a id="attributes-gfcpp__table_logging_props" class="no-quick-link"></a>Logging Properties

<table>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>log-disk-space-limit</td>
<td>Maximum amount of disk space, in megabytes, allowed for all log files, current, and rolled. If set to 0, the space is unlimited.</td>
<td>0</td>
</tr>
<tr class="even">
<td>log-file</td>
<td>Name and full path of the file where a running client writes log messages. If not specified, logging goes to <code class="ph codeph">stdout</code>.</td>
<td>no default file</td>
</tr>
<tr class="odd">
<td>log-file-size-limit</td>
<td>Maximum size, in megabytes, of a single log file. Once this limit is exceeded, a new log file is created and the current log file becomes inactive. If set to 0, the file size is unlimited.</td>
<td>0</td>
</tr>
<tr class="even">
<td>log-level</td>
<td>Controls the types of messages that are written to the application's log. These are the levels, in descending order of severity and the types of message they provide:
<ul>
<li><strong>Error</strong> (highest severity) is a serious failure that will probably prevent program execution.</li>
<li><strong>Warning</strong> is a potential problem in the system.</li>
<li><strong>Info</strong> is an informational message of interest to the end user and system administrator.</li>
<li><strong>Config</strong> is a static configuration message, often used to debug problems with particular configurations.</li>
<li><strong>Fine, Finer, Finest, and Debug</strong> provide tracing information. Only use these with guidance from technical support.</li>
</ul>
<p>Enabling logging at any level enables logging for all higher levels.</p></td>
<td>config</td>
</tr>
</tbody>
</table>


### <a id="attributes-gfcpp__table_statistic_props" class="no-quick-link"></a>Statistics Archiving Properties

<table>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>statistic-sampling-enabled</td>
<td>Controls whether the process creates a statistic archive file.</td>
<td>false</td>
</tr>
<tr class="even">
<td>statistic-archive-file</td>
<td>Name and full path of the file where a running system member writes archives statistics. If <code class="ph codeph">archive-disk-space-limit</code> is not set, the client appends the process ID to the configured file name, like <code class="ph codeph">statArchive-PID.gfs</code>. If the space limit is set, the process ID is not appended but each rolled file name is renamed to statArchive-ID.gfs, where ID is the rolled number of the file.</td>
<td>./statArchive.gfs</td>
</tr>
<tr class="odd">
<td>archive-disk-space-limit</td>
<td>Maximum amount of disk space, in gigabytes, allowed for all archive files, current, and rolled. If set to 0, the space is unlimited.</td>
<td>0</td>
</tr>
<tr class="even">
<td>archive-file-size-limit</td>
<td>Maximum size, in megabytes, of a single statistic archive file. Once this limit is exceeded, a new statistic archive file is created and the current archive file becomes inactive. If set to 0, the file size is unlimited.</td>
<td>0</td>
</tr>
<tr class="odd">
<td>statistic-sample-rate</td>
<td>Rate, in seconds, that statistics are sampled. Operating system statistics are updated only when a sample is taken. If statistic archival is enabled, then these samples are written to the archive.
<p>Lowering the sample rate for statistics reduces system resource use while still providing some statistics for system tuning and failure analysis.</p>
</td>
<td>1</td>
</tr>
<tr class="even">
<td>enable-time-statistics</td>
<td>Enables time-based statistics for the distributed system and caching. For performance reasons, time-based statistics are disabled by default./td>
<td>false</td>
</tr>
</tbody>
</table>


### <a id="attributes-gfcpp__table_durable_client_props" class="no-quick-link"></a>Durable Client Properties

| Attribute | Description                                                                                                                                                                                                                                                                    | Default |
|----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
| auto-ready-for-events      | Whether client subscriptions automatically receive events when declaratively configured via XML. If set to `false`, event startup is not automatic and you need to call the `Cache.ReadyForEvents()` method API after subscriptions for the server to start delivering events. | true    |
| durable-client-id          | Identifier to specify if you want the client to be durable.                                                                                                                                                                                                                    | empty   |
| durable-timeout            | Time, in seconds, a durable client's subscription is maintained when it is not connected to the server before being dropped.                                                                                                                                                   | 300     |


### <a id="attributes-gfcpp__table_security_props" class="no-quick-link"></a>Security Properties

The table describes the security-related system properties for native client authentication and authorization.

See [SSL Client/Server Communication](../security/sslclientserver.html).

<table>
<caption><span class="tablecap">System Properties for Client Authentication and Authorization</span></caption>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="even">
<td><code class="ph codeph">security-client-kspath</code></td>
<td>Path to a .PEM file, which contains the public certificates for all Geode cache servers to which the client can connect through specified endpoints.</td>
<td>null</td>
</tr>
<tr class="odd">
<td><code class="ph codeph">ssl-enabled</code></td>
<td>True if SSL connection support is enabled.</td>
<td>empty</td>
</tr>
<tr class="even">
<td><code class="ph codeph">ssl-keystore</code></td>
<td>Name of the .PEM keystore file, containing the client’s private key. Not set by default. Required if <code class="ph codeph">ssl-enabled</code> is true.</td>
<td></td>
</tr>
<tr class="odd">
<td><code class="ph codeph">ssl-keystore-password</code></td>
<td>Sets the password for the private key .PEM file for SSL.</td>
<td>null</td>
</tr>
<tr class="even">
<td><code class="ph codeph">ssl-truststore</code></td>
<td><p>Name of the .PEM truststore file, containing the servers’ public certificate. Not set by default. Required if <code class="ph codeph">ssl-enabled</code> is true.</p></td>
<td></td>
</tr>
</tbody>
</table>

## <a id="attributes-gfcpp__table_high_availability_props" class="no-quick-link"></a>High Availability Properties

<table>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code class="ph codeph">notify-ack-interval</code></td>
<td>Minimum period, in seconds, between two consecutive acknowledgment messages sent from the client to the server.</td>
<td>10</td>
</tr>
<tr class="even">
<td><code class="ph codeph">notify-dupcheck-life</code></td>
<td>Minimum time, in seconds, a client continues to track a notification source for duplicates when no new notifications arrive before expiring it.</td>
<td>300</td>
</tr>
</tbody>
</table>
