---
title: Using Pulse Views
---

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

Pulse provides a variety of different views to help you monitor <%=vars.product_name%> clusters, members, and regions.

The following sections provide an overview of the main Pulse views:

-   [Cluster View](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_9794B5754E474E10ABFBCD8B1DA240F8)
-   [Member View](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_3629814A3DF64D31A190495782DB0DBF)
-   [Region View](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_D151776BAC8B4704A71F37F8B5CE063D)
-   [Data Browser](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__sec_pulsedatabrowser)
-   [Alerts Widget](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_bfk_sc3_wn)

# <a id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_9794B5754E474E10ABFBCD8B1DA240F8" class="no-quick-link"></a>Cluster View

The cluster view is a high-level overview of the cluster. It is displayed immediately after you log into Pulse. Information displays around the perimeter of the cluster view show statistics such as memory usage, JVM pauses, and throughput. You can use the cluster view to drill down into details for individual members and regions in the cluster.

<img src="../../images/pulse_cluster_view.png" id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__image_CC7B54903DF24030850E55965CDB6EC4" class="image imageleft" width="624" />

Use these basic controls while in Cluster view:

1.  Click Members or Data to display information about <%=vars.product_name%> members or data regions in the cluster.
2.  Click the display icons to display the <%=vars.product_name%> members using icon view, block view, or table view. Note that icon view is available only when displaying Members.

    For example, the following shows <%=vars.product_name%> Members displayed in table view:

    <img src="../../images/member_view_list.png" id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__image_npw_sq3_wn" class="image" />
    -   While in block view or table view, click the name of a <%=vars.product_name%> member to display additional information in the [Member View](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_3629814A3DF64D31A190495782DB0DBF).
    -   Click Topology, Server Groups, or Redundancy Zones to filter the view based on all members in the topology, configured server groups, or configured redundancy zones.
    The following shows <%=vars.product_name%> Regions displayed in table view:
    <img src="../../images/pulse-region-detail.png" id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__image_glp_1jr_54" class="image" />
    -   While in block view or table view, click the name of a <%=vars.product_name%> region to display additional information in the [Region View](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_D151776BAC8B4704A71F37F8B5CE063D).

3.  While in icon view, click a host machine icon to display the <%=vars.product_name%> members on that machine.
4.  In the Alerts pane, click the severity tabs to filter the message display by the level of severity.

**Cluster View Screen Components**

The following table describes the data pieces displayed on the Cluster View screen.

<table>
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead>
<tr class="header">
<th>Screen Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>Cluster Status</strong></td>
<td>Overall status of the cluster being monitored. Possible statuses include Normal, Warning, or Severe.</td>
</tr>
<tr class="even">
<td>Total Heap</td>
<td>Total amount of memory (in GB) allocated to the Java heap across all members.</td>
</tr>
<tr class="odd">
<td>Members</td>
<td>Total number of members in the cluster.</td>
</tr>
<tr class="even">
<td>Servers</td>
<td>Total number of servers in the cluster.</td>
</tr>
<tr class="odd">
<td>Clients</td>
<td>Total number of clients in the cluster.</td>
</tr>
<tr class="even">
<td>Locators</td>
<td>Total number of locators in the cluster.</td>
</tr>
<tr class="odd">
<td>Regions</td>
<td>Total number of regions in the cluster.</td>
</tr>
<tr class="even">
<td>Functions</td>
<td>Total number of functions registered in the cluster.</td>
</tr>
<tr class="odd">
<td>Unique CQs</td>
<td>Total number of unique CQs. Corresponds to the UNIQUE _CQ_QUERY statistic.</td>
</tr>
<tr class="even">
<td>Subscriptions</td>
<td>Total number of client event subscriptions.</td>
</tr>
<tr class="odd">
<td><strong>Cluster Members</strong></td>
<td>Graphical, block, or table view of the members in the cluster.</td>
</tr>
<tr class="even">
<td>Topology</td>
<td>Organizes cluster members by DistributedMember Id.</td>
</tr>
<tr class="odd">
<td>Server Groups</td>
<td>Organizes cluster members by server group membership. If no server groups are configured, all members appear under the &quot;Default&quot; server group.</td>
</tr>
<tr class="even">
<td>Redundancy Zones</td>
<td>Organizes cluster members by redundancy zones. If no redundancy zones are configured, all members appear under the &quot;Default&quot; zone.</td>
</tr>
<tr class="odd">
<td>Host Machine</td>
<td>When you mouse over a machine icon in Topology View, a pop-up appears with the following machine statistics:
<ul>
<li><em>CPU Usage</em>. Percentage of CPU being used by <%=vars.product_name%> processes on the machine.</li>
<li><em>Memory Usage</em>. Amount of memory (in MB) being used by <%=vars.product_name%> processes.</li>
<li><em>Load Avg</em>. Average number of threads on the host machine that are in the run queue or are waiting for disk I/O over the last minutes. Corresponds to the Linux System statistic loadAverage1. If the load average is not available, a negative value is shown.</li>
<li><em>Sockets</em>. Number of sockets currently open on the machine.</li>
</ul></td>
</tr>
<tr class="even">
<td>Member</td>
<td>When you mouse over a member icon in Graphical View, a pop-up appears with the following member statistics:
<ul>
<li><em>CPU Usage</em>. Percentage of CPU being used by the <%=vars.product_name%> member process.</li>
<li><em>Threads</em>. Number of threads running on the member.</li>
<li><em>JVM Pauses</em>. Number of times the JVM used by the member process has paused due to garbage collection or excessive CPU usage.</li>
<li><em>Regions</em>. Number of regions hosted on the member process.</li>
<li><em>Clients</em>. Number of client currently connected to the member process.</li>
<li><em>Gateway Sender</em>. Number of gateway senders configured on the member.</li>
<li><em>Port</em>. Server port of the cache server member where clients can connect and perform cache operations.</li>
<li><em>GemFire Version</em>. The version of the <%=vars.product_name%> member.</li>
</ul></td>
</tr>
<tr class="odd">
<td>Member</td>
<td>In List View, the following data fields are displayed for each member:
<ul>
<li><em>ID</em>. DistributedMember Id of the member.</li>
<li><em>Name</em>. Name of the member.</li>
<li><em>Host</em>. Hostname or IP address where the member is running.</li>
<li><em>Heap Usage</em>. Amount of JVM heap memory being used by the member process.</li>
<li><em>CPU Usage</em>. Percentage of CPU being used by the <%=vars.product_name%> member process.</li>
<li><em>Uptime</em>. How long the member has been up and running.</li>
<li><em>Clients</em>. Number of clients currently connected to the member. It will have a value only if the member acts as a CacheServer.</li>
</ul></td>
</tr>
<tr class="even">
<td><strong>Key Statistics</strong></td>
<td>Displays a few key performance measurements of the cluster (over the last 15 minutes).</td>
</tr>
<tr class="odd">
<td>Write/Sec</td>
<td>Number of write operations per second that have occurred across the cluster. Each put/putAll operation counts as a write; for example, a putAll of 50 entries is counted as one write.</td>
</tr>
<tr class="even">
<td>Read/Sec</td>
<td>Number of read operations per second that have occurred across the cluster.</td>
</tr>
<tr class="odd">
<td>Queries/Sec</td>
<td>Number of queries per second that have been executed across the cluster.</td>
</tr>
<tr class="even">
<td><strong>No. of JVM Pauses</strong></td>
<td>Number of times the JVM has paused during the last five minutes to perform garbage collection.</td>
</tr>
<tr class="odd">
<td><strong>WAN Information</strong></td>
<td>If you have configured gateway senders or receivers for a multi-site (WAN) deployment, this box displays whether the remote cluster is reachable (working connectivity represented by a green triangle).</td>
</tr>
<tr class="even">
<td><strong>Disk Throughput</strong></td>
<td>Total disk throughput for all disks in cluster.</td>
</tr>
<tr class="odd">
<td><strong>Alerts View</strong></td>
<td>Displays alerts for the cluster.</td>
</tr>
</tbody>
</table>

# <a id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_3629814A3DF64D31A190495782DB0DBF" class="no-quick-link"></a>Member View

When you select an individual <%=vars.product_name%> member in Cluster View, Pulse displays the regions available on that member, as well as member-specific information such as the configured listen ports.

<img src="../../images/pulse_member_view.png" id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__image_EDBD3D333B2741DCAA5CB94719B507B7" class="image imageleft" width="624" />

Use these basic controls while in Member View:

1.  Click the display icons to display regions using block view or table view.
2.  Use the drop down menu to select a specific member or search for specific members by name.
3.  Click **Cluster View** to return to Cluster View. See [Cluster View](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_9794B5754E474E10ABFBCD8B1DA240F8).
4.  Click **Data Browser** to query region data. See [Data Browser](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__sec_pulsedatabrowser).

**Member View Screen Components**

The following table describes the data elements displayed on the Member View screen.

<table>
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead>
<tr class="header">
<th>Screen Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>Member Status</strong></td>
<td>Overall status of the member being monitored. Possible statuses include Normal, Warning, or Severe.</td>
</tr>
<tr class="even">
<td>Regions</td>
<td>Total number of regions hosted on the member.</td>
</tr>
<tr class="odd">
<td>Threads</td>
<td>Total number of threads being executed on the member.</td>
</tr>
<tr class="even">
<td>Sockets</td>
<td>Total number of sockets currently open on the member.</td>
</tr>
<tr class="odd">
<td>Load Avg.</td>
<td>Average number of threads on the member that are in the run queue or are waiting for disk I/O over the last minute. Corresponds to the Linux System statistic loadAverage1. If the load average is not available, a negative value is shown.</td>
</tr>
<tr class="even">
<td>Clients</td>
<td>Current number of client connections to the member.</td>
</tr>
<tr class="odd">
<td><strong>Member Regions</strong></td>
<td>Block or table view of the regions hosted on the member.</td>
</tr>
<tr class="even">
<td>Regions</td>
<td>When you mouse over a region in block view, a pop-up appears with the following data fields:
<ul>
<li><em>Name</em>. Region name.</li>
<li><em>Type</em>. For example, REPLICATE, PARTITION.</li>
<li><em>EntryCount</em>. Number of entries in the region.</li>
<li><em>EntrySize</em>. The aggregate entry size (in bytes) of all entries. For replicated regions this field will only provide a value if the eviction algorithm has been set to EvictionAlgorithm#LRU_ MEMORY. All partition regions will have this value. However, the value includes redundant entries and will also count the size of all the secondary entries on the node.</li>
</ul></td>
</tr>
<tr class="odd">
<td>Regions</td>
<td>In table view, the following fields are listed for each region:
<ul>
<li><em>Name</em>. Region name.</li>
<li><em>Type</em>. For example, REPLICATE, PARTITION.</li>
<li><em>EntryCount</em>. Number of entries in the region.</li>
<li><em>EntrySize</em>. The aggregate entry size (in bytes) of all entries. For replicated regions this field will only provide a value if the eviction algorithm has been set to EvictionAlgorithm#LRU_ MEMORY. All partition regions will have this value. However, the value includes redundant entries and will also count the size of all the secondary entries on the node.</li>
<li><em>Scope</em>. Scope configured for the region.</li>
<li><em>Disk Store Name</em>. Name of disk stores (if any) associated with the region.</li>
<li><em>Disk Synchronous</em>. True if writes to disk are set to synchronous and false if not. This field reflects the configured disk-synchronous region attribute.</li>
<li><em>Gateway Enabled</em>. Whether gateway sender and receiver configurations have been defined on members hosting this region.</li>
</ul></td>
</tr>
<tr class="even">
<td><strong>Member Clients</strong></td>
<td>In table view, the following fields are listed for each client:
<ul>
<li><em>Id</em>. DistributedMember ID of the client process.</li>
<li><em>Name</em>. Name of the client process.</li>
<li><em>Host</em>. Hostname or IP address of the client process.</li>
<li><em>Connected</em>. Whether the client process is currently connected to the member.</li>
<li><em>Queue Size</em>. The size of the queue used by server to send events in case of a subscription enabled client or a client that has continuous queries running on the server.</li>
<li><em>CPU Usage</em>. Percentage of CPU being used by the client process.</li>
<li><em>Uptime</em>. Amount of time the client process has been running.</li>
<li><em>Threads</em>. Threads being used by the member clients</li>
<li><em>Gets</em>. Total number of successful get requests completed.</li>
<li><em>Puts</em>. Total number of successful put requests completed.</li>
</ul></td>
</tr>
<tr class="odd">
<td><strong>Key Statistics</strong></td>
<td>Displays a few key performance measurements for the member (over the last 15 minutes).</td>
</tr>
<tr class="even">
<td>% CPU Usage</td>
<td>Percentage of CPU used by the member.</td>
</tr>
<tr class="odd">
<td>Read/Sec</td>
<td>Number of read operations per second that have occurred on the member.</td>
</tr>
<tr class="even">
<td>Write/Sec</td>
<td>Number of write operations per second that have occurred on the member. Each put/putAll operation counts as a write; for example, a putAll of 50 entries is counted as one write.</td>
</tr>
<tr class="odd">
<td><strong>Memory Usage</strong></td>
<td>Total memory used on the member in MB.</td>
</tr>
<tr class="even">
<td><strong>No. of JVM Pauses</strong></td>
<td>Number of times the JVM has paused during the last five minutes due to garbage collection or excessive CPU usage.</td>
</tr>
<tr class="odd">
<td><strong>WAN Information</strong></td>
<td>Displays cluster information. This dialog box only appears if you have configured WAN functionality (gateway senders and gateway receivers).</td>
</tr>
<tr class="even">
<td><strong>Disk Throughput</strong></td>
<td>Rate of disk writes on the member.</td>
</tr>
</tbody>
</table>

# <a id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_D151776BAC8B4704A71F37F8B5CE063D" class="no-quick-link"></a>Region View

The Pulse Region View provides a comprehensive overview of all regions in the cluster:

<img src="../../images/pulse_data_view.png" id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__image_A533852E38654E79BE5628E938E170EB" class="image imageleft" width="624" />

Use these basic controls while in Region View:

1.  Click the display icons to display all members that host the region using block view or table view.

    (Click the name of a member to change to that member's [Member View](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_3629814A3DF64D31A190495782DB0DBF).)

2.  Search for specific members that host the current region.
3.  Hover over a member name to display information such as the region entry count, entry size, and throughput on that member.
4.  Click [Cluster View](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_9794B5754E474E10ABFBCD8B1DA240F8) or [Data Browser](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__sec_pulsedatabrowser) to go to those screens.

**Region View Screen Components**

The following table describes the data elements displayed on the Region View screen.

<table>
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead>
<tr class="header">
<th>Screen Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>Region Members</strong></td>
<td>Lists information about <%=vars.product_name%> members that host the region, either in block view or table view.</td>
</tr>
<tr class="even">
<td>Region Member (Detail View)</td>
<td>When you hover over a region member in block view, a pop-up appears with the following data fields:
<ul>
<li><em>Member Name</em>. The name of the <%=vars.product_name%> member hosting the region.</li>
<li><em>EntryCount</em>. Number of entries for the region on that member.</li>
<li><em>EntrySize</em>. The aggregate entry size (in bytes) of all entries on that member. For replicated regions this field will only provide a value if the eviction algorithm has been set to EvictionAlgorithm#LRU_ MEMORY. All partition regions will have this value. However, the value includes redundant entries and will also count the size of all the secondary entries on the node.</li>
<li><em>Accessor</em>. Indicates whether the member is an accessor member.</li>
<li><em>Reads/Writes</em>. Summary of reads and writes served from memory and from disk stores over the last 15 minutes.</li>
</ul></td>
</tr>
<tr class="odd">
<td>Region Member (Table View)</td>
<td>In table view, the following fields are listed for each region member:
<ul>
<li><em>ID</em>. The unique member ID.</li>
<li><em>Name</em>. Region name.</li>
<li><em>Host</em>. Member hostname.</li>
<li><em>Heap Usage</em>. The total amount of heap used on the member in MB.</li>
<li><em>CPU Usage</em>. CPU usage as a percent of available CPU.</li>
<li><em>Uptime</em>. The amount of time elapsed since the member started.</li>
<li><em>Accessor</em>. Indicates whether the member is an accessor member.</li>
</ul></td>
</tr>
<tr class="even">
<td><strong>Region Detail</strong></td>
<td>When you have selected a region, the right hand pane displays the following information about the region:
<ul>
<li><em>Name</em>. Name of the region.</li>
<li><em>Region Path</em>. Path for the region.</li>
<li><em>Type</em>. For example, REPLICATE, PARTITION</li>
<li><em>Members</em>. Number of members that are hosting the region.</li>
<li><em>Empty Nodes</em>. Nodes where the region DataPolicy is defined as EMPTY or where LocalMaxMemory is set to 0.</li>
<li><em>Entry Count</em>. Total number of entries in the region.</li>
<li><em>Disk Usage</em>. Persistent data usage.</li>
<li><em>Persistence</em>. Indicates whether the region's data is persisted to disk.</li>
<li><em>Memory Usage</em>. The amount of memory used and total available memory (also shown as a percentage).</li>
<li><em>Reads/Writes</em>. Summary of reads and writes served from memory and from disk stores over the last 15 minutes.</li>
</ul></td>
</tr>
</tbody>
</table>

# <a id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__sec_pulsedatabrowser" class="no-quick-link"></a>Data Browser

The Pulse Data Browser enables you to query region data. Note that there are two key attributes available on DistributedSystemMXBean (see [List of <%=vars.product_name%> JMX MBeans](../../managing/management/list_of_mbeans.html#topic_4BCF867697C3456D96066BAD7F39FC8B)) that you can use to configure limits for the result sets displayed in Data Browser:

-   `QueryResultSetLimit` limits the number of rows that Data Browser queries return. 1000 rows are displayed by default.
-   `QueryCollectionsDepth` limits the number of elements of a collection that Data Browser queries return. This attribute applies to query results contain collections such as Map, List, and so forth. The default value is 100 elements.

See the `org.apache.geode.management.DistributedSystemMXBean` JavaDocs for information on available MBean methods and attributes.

The following shows an example Data Browser view:

<img src="../../images/pulse-data-browser.png" id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__image_hhp_dz2_44" class="image imageleft" width="624" />

Use these basic controls while in Data Browser view:

1.  Search for the name of a specific region.
2.  Select one or more regions to display the <%=vars.product_name%> members that host those regions. The hosting <%=vars.product_name%> members appear in the Region Members section.
3.  Select one or more members from the Region Members section to restrict query results to those members.
4.  Type in the text of a query to execute. See [Querying](../../developing/querying_basics/chapter_overview.html).
5.  Display a list of previously-executed queries. Double-click on a query from the history list to copy it to the Query Editor, or delete the query from your history.
6.  Execute your query or clear the contents of the Query Editor.
7.  View the current query results.
8.  Export the query results to a text file.
9.  Return to [Cluster View](#topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_9794B5754E474E10ABFBCD8B1DA240F8).

# <a id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__section_bfk_sc3_wn" class="no-quick-link"></a>Alerts Widget

The Alerts Widget appears in the right portion of the screen and displays a list of alerts.

The alerts displayed for the cluster appear based on the alertLevel field set in the DistributedSystemMXBean. By default, log messages with the level of SEVERE are shown as alerts. You can modify the level by using the `DistributedMXBean.changeAlertLevel` method. See [System Alert Notifications](../../managing/management/notification_federation_and_alerts.html#topic_212EE5A2ABAB4E8E8EF71807C9ECEF1A__section_7463D13112D54406953416356835E290) for more information.

<img src="../../images/pulse_alerts_widget.png" id="topic_F0ECE9E8179541CCA3D6C5F4FBA84404__image_jrc_smt_qn" class="image" />

Use these basic controls in the Alerts Widget:

1.  Select an alert level to view only alerts with a specific severity.
2.  Enter text in the search box to filter the list of alerts.
3.  Select an alert and click Clear to remove it from the alert list.
4.  Click **Clear All** to remove all alerts from the widget.
5.  Double-click an alert to open a pop-up window that displays the full text of the alert message.
6.  Click the check mark in an alert pop-up window to acknowledge the alert. Acknowledged alerts display a check mark in the list of alerts.
7.  Triple-click the alert in the pop-up or in the alert list to select the message text. You can then copy and paste the text into another application.
8.  Click the **X** to close the pop-up alert window.

