Skip to main content
Terminal Services Managerv26.04.3 · Apr 2026 Download View Pricing

How to Monitor Terminal Server (RDS) Sessions and Performance

On a Remote Desktop Services host, a handful of busy sessions can slow everyone down. Terminal server monitoring is how you catch that early: watch who is connected, how many sessions are active or sitting disconnected, and which users and processes are eating CPU and memory before the complaints start.

Windows ships with several tools that show this, each covering part of the picture. This guide walks through the built-in options, then shows how Terminal Services Manager pulls the same data from every server into one view.

What to watch on an RDS host

A useful monitoring routine covers five things:

  • Active, idle, and disconnected sessions on each host, and how long each has been in that state.
  • Who is logged on, from which client, and since when.
  • Per-user CPU and memory, so one heavy session does not starve the rest.
  • Processes inside each session, to find the app that is actually to blame.
  • Logon and disconnect events, for a record of when users came and went.

Built-in ways to monitor terminal server sessions

Command line: quser and qwinsta

quser (query user) lists the sessions on a host with their state, idle time, and logon time:

quser /server:RDSH01

qwinsta (also available as query session) adds the session type and client device:

qwinsta /server:RDSH01

Both accept /server: so you can check a remote host without signing in to it. They are quick for a single server, but you run them one host at a time and read plain text, with no sorting or resource figures.

Task Manager

On the session host, the Users tab in Task Manager lists every connected user with their CPU, memory, disk, and network use. Expand a user to see the processes inside that session, and end a runaway one from the same place. It is the fastest way to see live resource use, but only for the machine you are signed in to.

Server Manager

For a full RDS deployment, Server Manager > Remote Desktop Services > Collections shows the connections in each collection, with the user, session state, and host. It reflects the deployment through the Connection Broker, so it is handy for a farm, though it does not break down CPU or memory per user. Session management moved here after Microsoft removed the tsadmin.msc snap-in: see where Terminal Services Manager went in Windows Server 2012 and later.

Performance Monitor counters

Performance Monitor (perfmon) exposes session counts as counters you can chart or log. The Terminal Services object carries Active Sessions, Inactive Sessions, and Total Sessions for the host, and the Terminal Services Session object holds per-session counters such as processor and memory use. These are what you point a long-term baseline or an alert at. (If the counters read zero or throw a "property value conflict", see how to fix empty CPU and memory counters.)

Event Viewer: session logon and disconnect events

For a history of session activity, two operational logs record every state change:

Applications and Services Logs > Microsoft > Windows > TerminalServices-LocalSessionManager > Operational

Event ID Meaning
21 Session logon succeeded
22 Shell (desktop) start notification
23 Session logoff succeeded
24 Session has been disconnected
25 Session reconnection succeeded

TerminalServices-RemoteConnectionManager > Operational logs event 1149 when network-level authentication succeeds, including the source user and client address, which is useful for tracking where connections come from.

These logs answer "when did this user connect and drop" after the fact, but they are per-server and awkward to correlate across a farm. Reconstructing whole sessions means pairing each logon with its logoff across both logs. How to audit RDP logon history walks through that.

Where the built-in tools run out

Each tool above works well on one host. Across a farm the gaps show:

  • No single screen for every server at once.
  • No way to sort all users by CPU or memory to find the worst offender fast.
  • Session actions and process views live in separate tools.

For a few servers you can live with it. For a real deployment, switching between consoles per host is where the time goes.

Monitor every RDS server from one console

Terminal Services Manager collects sessions, users, and processes from all your Remote Desktop servers into a single window, and refreshes them live.

See every session in one place. The User sessions tab lists active, idle, and disconnected sessions across all servers, with the user, client, state, and idle time. Sort by any column, or apply a preset such as Disconnected Users to narrow the list.

Active RDS sessions from several servers on the User sessions tab

Track resource use per user. CPU and memory are shown per session, so a user consuming far more than the rest stands out at a glance.

CPU and memory use per user session in Terminal Services Manager

Find the process behind the load. Drill into a session to see its processes ranked by resource use, and end the one causing the problem without signing in to the server.

Processes inside a session ranked by CPU and memory use

Beyond CPU and memory, the program reports the quality of each RDP connection from signals that hold up in practice: frame quality, frames skipped, packet loss, and retransmission, rolled into a Poor / Fair / Good / Excellent score. That gives you a read on the user's actual experience, not just server load.

Session details and connection quality for an RDP session

Two things to check regularly

Watch for sustained high load. If a host sits at 80 to 90 percent CPU or memory for long stretches, sort the sessions by resource use and look at the top user's processes. Often it is one background task or a stuck application, not the whole server needing more hardware.

Clear out disconnected sessions. Sessions left in the disconnected state keep holding memory and a Remote Desktop license. Watch how many pile up, and log them off when they are clearly abandoned. See how to log off disconnected RDP sessions.

FAQ

How do I monitor terminal server sessions?
Use quser or qwinsta for a quick text list on one host, Task Manager's Users tab for live per-user resource use, and Performance Monitor's Terminal Services counters for a baseline. To watch every server at once with sorting and per-user detail, use Terminal Services Manager.

How do I see all active RDP sessions on a server?
Run quser /server:HOSTNAME from a command prompt, or open the Users tab in Task Manager on the host. Terminal Services Manager shows active, idle, and disconnected sessions from all your servers together.

Which performance counters show RDS sessions?
The Terminal Services object provides Active Sessions, Inactive Sessions, and Total Sessions for the host. The Terminal Services Session object holds per-session counters such as processor and memory use.

How do I monitor RDS sessions across multiple servers?
The built-in tools work one host at a time. Terminal Services Manager connects to all your Remote Desktop servers and shows their sessions, users, and processes in one window, so you do not switch consoles per server.

Related

Links