Diagnostic Monitor is an integrated diagnostic facility in ArcGIS Pro. Status information, logs, and events are presented and continuously updated in Diagnostic Monitor while ArcGIS Pro is running. Diagnostic Monitor contains a set of tabs and status indicators. Diagnostic Monitor currently includes the Counters, 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.
Diagnostic Monitor is available in all ArcGIS Pro-based products and is different from ArcGIS Monitor, a product for ArcGIS Enterprise deployments.
Start Diagnostic Monitor
You can start Diagnostic Monitor in either of the following ways:
- Press Ctrl+Alt+M while ArcGIS Pro is open.
- Start ArcGIS Pro from the command line using the switch /enablediagnostics.
If you use the command line option, you can also include a /loglevel=debug parameter to enable debug mode in Diagnostic Monitor. Debug mode persists through your subsequent ArcGIS Pro sessions until you disable it from the Log tab.
When Diagnostic Monitor is enabled from the command line, the 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 units of work (operations) are organized into one or more tasks while executing. Tasks are central to how work is performed in ArcGIS Pro, and they are prominently featured in 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 running 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 runs on a thread that's independent of the GUI. This allows the Diagnostic Monitor dialog box to remain responsive even if the GUI thread is unresponsive.
Worker threads in 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 in the currently loaded project. These threads also help accelerate map rendering. Some types of user interactions are prohibited while operations are running on foreground threads.
- High Priority Background Threads and Low Priority Background Threads—These threads perform a wide range of operations that do not depend on the CIM state and can run 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.
- Miscellaneous Threads—The Background Geoprocessing thread is used to perform background geoprocessing operations. Internally, this thread often collaborates with other threads to complete the operation. The Shared Background thread is used for special cases in which sets of tasks must run on the same consistent thread over time.
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 in the application. Thread Activity indicators display colors based on the status of the corresponding threads.
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 indicates that one or more HTTP requests are currently active in the application.
Green indicates that a task is currently running on the foreground thread. Various buttons and tools may be unavailable while any foreground task is running.
Yellow indicates that 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 indicates that a pane is currently busy. Various buttons and tools may be unavailable while a pane is busy.
Yellow indicates that 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.
Yellow indicates that 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 that a geoprocessing operation is currently running. This indicator will be lit regardless of whether it's a background or foreground geoprocessing operation.
Thread activity indicators
Each of the threads mentioned previously 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 Counters, Tasks, and Log tabs. The Counters tab lists internal counters. The Tasks tab displays recent tasks. The Log tab shows an event log viewer.
The Counters 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.
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 time span.
- IRequest Counters—These counters are reserved for internal use.
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.
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 run task at the top of the list. Inner tasks (queued from within a running outer task) do not appear in this list. Tasks that are queued or currently running are displayed in green. Each task has an associated set of properties:
- Task #—A number indicating the sequential position of a task; for example, Task # 42 indicates the forty-second task within the running process.
- Queued Time—The wall-clock time when the task was first queued. Tasks initiated while another task is still running are queued and will not begin to run 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 running 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 run the task, from the time 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 identify, for instance, the task with the longest run 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.
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.
The Log tab is a live event log viewer with sorting and filtering capabilities. When running in diagnostic mode, numerous subsystems in 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.
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. Because of 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 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.
Troubleshooting performance issues
For tips on configuring ArcGIS Pro to improve performance, see Troubleshooting Performance Issues in ArcGIS Pro in Esri Community.