Diagnostic Monitor

Diagnostic Monitor is an integrated diagnostic facility within ArcGIS Pro. Status information, logs, and events are presented and continuously updated within Diagnostic Monitor while ArcGIS Pro is running. Diagnostic Monitor contains a set of tabs and status indicators. Diagnostic Monitor currently includes the Counter, Tasks, and Log tabs.

The information on the Diagnostic Monitor dialog box can be used to help diagnose various application problems including unresponsive conditions, resource overconsumption, function failures, and performance degradation.

Overview of Diagnostic Monitor


Diagnostic Monitor is available in all ArcGIS Pro-based products and should not be confused with ArcGIS Monitor.

Enable Diagnostic Monitor

Diagnostic Monitor can be started using the keyboard shortcut Ctrl+Alt+M, or by starting ArcGIS Pro with the command line switch /enablediagnostics. In the latter case, the Diagnostic Monitor dialog box is initially minimized on the Microsoft Windows taskbar.

To troubleshoot a particular workflow with Diagnostic Monitor, open the monitor before working on the trouble area. To configure the Diagnostic Monitor dialog box to stay on top of all other windows in ArcGIS Pro, right-click the dialog box's caption area and click Always On Top. This can be useful when you want to closely monitor activity in Diagnostic Monitor while using different application features.

ArcGIS Pro architectural overview

ArcGIS Pro is a 64-bit, multithreaded, modular application. Functional subsystems are loaded on demand and perform work—such as computing a buffer or rendering a map—within worker threads or within separate worker processes. In most cases, logical chunks of work (operations) are organized into one or more tasks while executing. Tasks are central to how things get done in ArcGIS Pro, and they are prominently featured within Diagnostic Monitor.

A dedicated thread is responsible for rendering the application's user interface elements, and for processing user input in the form of keyboard input and mouse clicks. While an operation is executing on one of the worker threads, the graphical user interface (GUI) thread provides feedback relevant to how the operation is progressing, as well as a means for canceling the operation if applicable. Diagnostic Monitor itself runs on a special thread that's independent of the GUI. This allows the Diagnostic Monitor dialog box to remain responsive even if the GUI thread hangs.

Worker threads within ArcGIS Pro are divided into families dedicated to specific functional areas.

  • Foreground Threads—A set of four worker threads that governs the Cartographic Information Model (CIM), the primary repository of the configuration state within the currently loaded project. These threads also help accelerate map rendering. Certain kinds of user interactions are prohibited while operations are running on Foreground Threads.
  • Background Threads—These threads perform a wide range of operations that do not depend on the CIM state and can run independently in the background while the user performs other actions. Tasks assigned to High Priority Background Threads run faster and have priority over tasks assigned to Low Priority Background Threads. The Shared Background thread is used for special cases in which sets of tasks must run on the same consistent thread over time.
  • Geoprocessing Threads—This thread is used to perform background geoprocessing operations. Internally, the Geoprocessing Thread will often collaborate with other threads to complete the operation.
Overview of the threads used in Diagnostic Monitor

Status area

The Status area contains Status indicators and Thread Activity indicators. Status indicators display different colors depending on the current application status. They are helpful in narrowing down problems occurring within the application. Thread Activity indicators display colors based on the status of the corresponding threads.

Status indicators

Status indicators in Diagnostic Monitor


Red indicates that the GUI thread is no longer sending messages and cannot react to mouse or keyboard input; UI graphics may render incorrectly when the GUI thread is not responding. Occurrences of unresponsiveness are recorded in the Unresponsive Log.


Yellow indicates when the active task does not have an associated progressor and thus, inadequate feedback is being presented to the user while the task is running. Associated tasks are also flagged in yellow in the task log when this condition is detected.


Yellow indicates that the issuance rate for tasks has exceeded 10 per second.


Green if one or more HTTP requests are currently active within the application.


Green if a task is currently executing on the foreground thread. Various buttons and tools may be unavailable while any foreground task is executing.


Yellow if a view—usually containing a map, globe, scene or layout—is currently busy. Various buttons and tools may be unavailable while a view is busy.


Yellow if a pane is currently busy. Various buttons and tools may be unavailable while a pane is busy.


Yellow if a task is stalled due to drawing-related operations currently running on one of the foreground threads. Various buttons and tools may be unavailable while the application is waiting.


A task is stalled while a previously suspended drawing operation is being resumed. Various buttons and tools may be unavailable while the application is resuming.


Green indicates a geoprocessing operation is currently executing. This indicator will be lit regardless of whether it's a background or foreground geoprocessing operation.

Thread activity indicators

Each of the threads mentioned above has a corresponding activity indicator within the status area of Diagnostic Monitor. Thread status indicators are green if the associated thread is currently running and gray if the thread is inactive (sleeping). Thread status indicators may appear dark gray if the host machine's CPU lacks sufficient cores to support additional threads.

Diagnostic Monitor tabs

Diagnostic Monitor consists of the Counter, Tasks, and Log tabs. The Counter tab lists internal counters. The Tasks tab displays recent tasks. The Log tab shows an event log viewer.

Counter tab

The Counter tab consists of a list of named internal counters. Each counter is linked to the graph above the list. When a particular counter in the list is selected, the graph updates to display the historical values for that counter over the last 20 seconds.

Counter tab on Diagnostic Monitor

Within the counter list are useful metrics such as memory consumption, thread count, HTTP request count, and loaded DLL count. A few counters require additional explanation:

  • Current Task Rate—The current rate at which tasks are being queued to the foreground threads. A high count here can indicate that an unnecessarily high number of tasks is being issued to perform the operation. Operations with a high number of tasks can be less efficient.
  • CIM Counters—These counters are used to record the total count of read and write operations on the CIM. Drawing-related reads and writes are counted separately. Since each operation has associated overhead, smaller jumps are preferable to larger jumps within a particular timespan.
  • IRequest Counters—These counters are reserved for internal use.

Tasks tab

The Tasks tab contains a log for tasks that were recently issued from user interaction, and another log for any unresponsive conditions that have occurred on the GUI thread.

Tasks in Diagnostic Monitor

Recent UI Task log

The Recent UI Task log provides a record of the most recent tasks issued in response to user interactions. Due to the overhead associated with identifying task functions, this log is unavailable whenever the Diagnostic Monitor dialog box is closed. By default, tasks are sorted in chronological order with the most recently executed task at the top of the list. Inner tasks (queued from within an executing outer task) do not appear in this list. Tasks that are queued or currently executing are displayed in green. Each task has an associated set of properties:

  • Task #—A number indicating the execution sequence of a task; for example, Task # 42 would indicate the forty-second task executed within the running process.
  • Queued Time—The wall-clock time when the task was first queued. Tasks initiated while another task is still executing are queued and will not begin to execute until the current task is complete. Buttons and controls are normally disabled while a foreground task is running, to prevent additional tasks from being queued while the state of the application is transitioning.
  • Task time—The amount of time, in milliseconds, associated with the actual execution of the task.
  • Resume Time—The time spent waiting, in milliseconds, for a drawing resumption to complete.
  • Wait Time—The time spent waiting, in milliseconds, for drawing-related operations to complete.
  • Total Time—The total time needed, in milliseconds, to execute the task, from the point the task was queued to the time the task completes (including any time associated with drawing resumption).
  • Function—The name of the outermost function best associated with the task.

Tasks that are queued, or still running, display -1 for their time values. The actual time will be displayed in milliseconds when the task completes or is canceled.

A heuristic is used to display the function that is most relevant to the task being queued. The heuristic goes through the call stack looking for a frame containing non-OS functions.

The Recent UI Task log can be sorted by any column, in ascending or descending order. This capability can be used to quickly identify, for instance the task with the longest execution time. The content of the log can be copied to the clipboard or cleared by right-clicking anywhere on the list and clicking Copy or Clear, respectively.

Unresponsive log

Whenever the GUI thread becomes unresponsive, an unresponsive condition event will be logged containing the start time and total duration. The content of this log can be copied to the clipboard by right-clicking anywhere on the list and clicking Copy.

Log tab

The Log tab is a live event log viewer with sorting and filtering capabilities. When running in diagnostic mode, numerous subsystems within ArcGIS Pro will write diagnostic information in the event log. Diagnostic mode can be enabled through a command line argument; however, it is also automatically enabled when Diagnostic Monitor is displayed.

The Log tab in Diagnostic Monitor

There are four event types:

  • Error—Used to indicate significant failures during operation execution
  • Warning—Less critical and can sometimes be ignored
  • Information—Issued to provide additional contextual information about the running operation
  • Debug—Detailed implementation information, primarily intended for Esri staff

Event types can be filtered in the list using the corresponding check boxes at the top of the list. Due to their importance, error events are always included in the list and cannot be filtered out. The filter entry can be used to be more selective. When text is entered here, only events in which at least one of the columns contains that text (case insensitive) will be displayed.

The total number of matching events is displayed in the upper right of the Log tab.

Log files

Log files are produced under the user's Documents folder in the ArcGIS\Diagnostics subfolder. In the case of ArcGIS Pro, log files look like this: ArcGISProLog-16360~89343E4F-74E8-4F26-A705-B805E8C92BB0, and have the following properties:

  • ArcGISProLog is the host executable name.
  • 16360 is the process ID.
  • 89343E4F-74E8-4F26-A705-B805E8C92BB0 is the unique ID created for that instance.