<% set_title("Managing", product_name_long)%>

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

*Managing <%=vars.product_name_long%>* describes how to plan and implement tasks associated with managing, monitoring, and troubleshooting <%=vars.product_name_long%>.

-   **[<%=vars.product_name_long%> Management and Monitoring](management/management_and_monitoring.html)**

    <%=vars.product_name_long%> provides APIs and tools for managing your cluster and monitoring the health of your cluster members.

-   **[Managing Heap and Off-heap Memory](heap_use/heap_management.html)**

    By default, <%=vars.product_name_long%> uses the JVM heap. <%=vars.product_name_long%> also offers an option to store data off heap. This section describes how to manage heap and off-heap memory to best support your application.

-   **[Disk Storage](disk_storage/chapter_overview.html)**

    With <%=vars.product_name_long%> disk stores, you can persist data to disk as a backup to your in-memory copy and overflow data to disk when memory use gets too high.

-   **[Cache and Region Snapshots](cache_snapshots/chapter_overview.html)**

    Snapshots allow you to save region data and reload it later. A typical use case is loading data from one environment into another, such as capturing data from a production system and moving it into a smaller QA or development system.

-   **[Region Compression](region_compression.html)**

    This section describes region compression, its benefits and usage.

-   **[Network Partitioning](network_partitioning/chapter_overview.html)**

    <%=vars.product_name_long%> architecture and management features help detect and resolve network partition problems.

-   **[Security](security/chapter_overview.html)**

    The security framework establishes trust by authenticating components 
    and members upon connection. It facilitates the authorization of operations.

-   **[Performance Tuning and Configuration](monitor_tune/chapter_overview.html)**

    A collection of tools and controls allow you to monitor and adjust <%=vars.product_name_long%> performance.

-   **[Logging](logging/logging.html)**

    Comprehensive logging messages help you confirm system configuration and debug problems in configuration and code.

-   **[Statistics](statistics/chapter_overview.html)**

    Every application and server in a cluster can access statistical data about <%=vars.product_name_long%> operations. You can configure the gathering of statistics by using the `alter runtime` command of `gfsh` or in the `gemfire.properties` file to facilitate system analysis and troubleshooting.

-   **[Troubleshooting and System Recovery](troubleshooting/chapter_overview.html)**

    This section provides strategies for handling common errors and failure situations.


