---
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>
<td><strong>Cluster Status</strong></td>
<td>Overall status of the cluster being monitored. Possible statuses include Normal, Warning, or Severe.</td>
</tr>
<tr>
<td>Total Heap</td>
<td>Total amount of memory (in GB) allocated to the Java heap across all members.</td>
</tr>
<tr>
<td>Members</td>
<td>Total number of members in the cluster.</td>
</tr>
<tr>
<td>Servers</td>
<td>Total number of servers in the cluster.</td>
</tr>
<tr>
<td>Clients</td>
<td>Total number of clients in the cluster.</td>
</tr>
<tr>
<td>Locators</td>
<td>Total number of locators in the cluster.</td>
</tr>
<tr>
<td>Regions</td>
<td>Total number of regions in the cluster.</td>
</tr>
<tr>
<td>Functions</td>
<td>Total number of functions registered in the cluster.</td>
</tr>
<tr>
<td>Unique CQs</td>
<td>Total number of unique CQs. Corresponds to the UNIQUE _CQ_QUERY statistic.</td>
</tr>
<tr>
<td>Subscriptions</td>
<td>Total number of client event subscriptions.</td>
</tr>
<tr>
<td><strong>Cluster Members</strong></td>
<td>Graphical, block, or table view of the members in the cluster.</td>
</tr>
<tr>
<td>Topology</td>
<td>Organizes cluster members by DistributedMember Id.</td>
</tr>
<tr>
<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>
<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>
<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>
<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>
<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>
<td><strong>Key Statistics</strong></td>
<td>Displays a few key performance measurements of the cluster (over the last 15 minutes).</td>
</tr>
<tr>
<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>
<td>Read/Sec</td>
<td>Number of read operations per second that have occurred across the cluster.</td>
</tr>
<tr>
<td>Queries/Sec</td>
<td>Number of queries per second that have been executed across the cluster.</td>
</tr>
<tr>
<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>
<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>
<td><strong>Disk Throughput</strong></td>
<td>Total disk throughput for all disks in cluster.</td>
</tr>
<tr>
<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>
<td><strong>Member Status</strong></td>
<td>Overall status of the member being monitored. Possible statuses include Normal, Warning, or Severe.</td>
</tr>
<tr>
<td>Regions</td>
<td>Total number of regions hosted on the member.</td>
</tr>
<tr>
<td>Threads</td>
<td>Total number of threads being executed on the member.</td>
</tr>
<tr>
<td>Sockets</td>
<td>Total number of sockets currently open on the member.</td>
</tr>
<tr>
<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>
<td>Clients</td>
<td>Current number of client connections to the member.</td>
</tr>
<tr>
<td><strong>Member Regions</strong></td>
<td>Block or table view of the regions hosted on the member.</td>
</tr>
<tr>
<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>
<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>
<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>
<td><strong>Key Statistics</strong></td>
<td>Displays a few key performance measurements for the member (over the last 15 minutes).</td>
</tr>
<tr>
<td>% CPU Usage</td>
<td>Percentage of CPU used by the member.</td>
</tr>
<tr>
<td>Read/Sec</td>
<td>Number of read operations per second that have occurred on the member.</td>
</tr>
<tr>
<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>
<td><strong>Memory Usage</strong></td>
<td>Total memory used on the member in MB.</td>
</tr>
<tr>
<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>
<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>
<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>
<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>
<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>
<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>
<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.

