Client Server Runtime Process (csrss.exe) high CPU: find what is driving it

You cannot end csrss, so the job is to find the session and application making it work, or to prove the file is not the real one.

How-to· 4 min read· By the RemediateDesk team · Published October 19, 2026 ·All guides

Read this before you touch the process

csrss.exe, the Client Server Runtime Process, is a core Windows component. There is one instance for the system and one for each logon session, and Windows treats it as critical: ending it stops the machine with a stop error. You are never fixing csrss itself. You are working out which application or session is making it work, or confirming the file is not the real one.

1. Which csrss, and in which session?

Each instance serves one session, so the session ID tells you whose desktop or which service session is involved.

Get-CimInstance Win32_Process -Filter "Name='csrss.exe'" |
  Select-Object ProcessId, SessionId, ExecutablePath, CreationDate
Get-CimInstance Win32_PerfFormattedData_PerfProc_Process -Filter "Name LIKE 'csrss%'" |
  Select-Object Name, IDProcess, PercentProcessorTime
quser

quser lists the sessions and their IDs, including disconnected Remote Desktop sessions that nobody is looking at. A session that is busy while disconnected is a strong lead.

2. Is it the real file?

The real one lives in the Windows System32 folder and is signed by Microsoft. Impostors usually sit in a different folder or use a name that differs by a letter.

Get-AuthenticodeSignature "$env:SystemRoot\System32\csrss.exe" | Select-Object Status, @{n='Signer';e={$_.SignerCertificate.Subject}}
Get-Process | Where-Object Name -like 'csr*' | Select-Object Id, Name, Path

A protected system process can return a blank path to a non-elevated query, so a blank path is not itself suspicious. A populated path outside System32, a lookalike name, or an unsigned file is. In that case stop here, do not delete it, and hand it to whoever runs endpoint security.

3. Who is generating the work?

If the file is genuine, csrss is busy because something in that session is asking it to be. Rank the processes in the same session by current CPU.

$sid = 2   # the SessionId of the busy csrss
$ids = (Get-Process | Where-Object SessionId -eq $sid).Id
Get-CimInstance Win32_PerfFormattedData_PerfProc_Process |
  Where-Object { $_.IDProcess -in $ids } |
  Sort-Object PercentProcessorTime -Descending |
  Select-Object -First 10 Name, IDProcess, PercentProcessorTime

Practitioner reports connect high csrss usage to workloads that create very many short-lived console windows or processes, to applications that redraw constantly, and to font-heavy documents. These are commonly reported rather than documented by Microsoft, so treat each as a hypothesis the numbers must support. If one application dominates the session, that application is your answer.

4. When nothing in the session stands out

If csrss is busy and no process in its session explains it, record a short trace and escalate rather than guessing. The Windows Performance Recorder ships with Windows and can capture CPU activity for later analysis.

wpr -start CPU
# reproduce for a minute, then:
wpr -stop C:\Windows\Temp\csrss-cpu.etl

A trace contains process names and file paths from the machine, so treat the file as customer data: store it where only your team can read it and delete it when the case closes. Recording changes nothing on disk beyond the trace file, but it does add load while it runs.

5. Safe responses

  • Close or restart the one application that dominates the session, after asking the user to save. Ending an application discards unsaved work.
  • Log off an idle, disconnected session that is spinning, once you have confirmed with quser that nobody needs it. This closes everything in that session.
  • Never end csrss.exe, wininit.exe or other system processes, and do not end security tooling to test a theory.
# Only with approval, and only for a session you have confirmed is unneeded:
logoff 2

6. Verify

Sample the csrss instance again for several minutes after the change and confirm that the user-visible symptom is gone, not just that one reading dropped. If csrss climbs again, return to step 3: the cause came back, which means it was not removed.

Where RemediateDesk fits

RemediateDesk can run steps 1 to 3 as read-only checks on the real machine and report which session and which process stand out. Closing an application or logging off a session is a change, so it is proposed as an exact command and waits for a technician's approval, and an always-ask or never-allowed rule of yours can cover anything you want kept manual. It cannot judge whether a file is malicious beyond the signature and path checks above; that decision belongs to your security tooling. If you want the same investigation on every ticket, see help desk automation for MSPs.

Frequently asked questions

What is the Client Server Runtime Process?

csrss.exe is a core Windows component that supports the Win32 subsystem. There is an instance for the system and one per logon session, and it is a critical process that Windows will not let you end without stopping the machine.

Is csrss.exe a virus?

The genuine file is in the Windows System32 folder and is signed by Microsoft. A copy in any other folder, an unsigned file or a lookalike name such as one with a letter changed is suspicious and should go to endpoint security rather than be deleted remotely.

Can I kill csrss.exe to stop the high CPU?

No. Terminating it brings the system down with a stop error. The high CPU is almost always caused by something in that session asking it to work, so find that application instead.

Why is csrss.exe high only in one Remote Desktop session?

Each session has its own csrss instance, so a busy one points at what is running in that session. A disconnected session with a spinning application is a common reason, which the session ID and quser output will show.

Ready to stop context-switching on printer tickets?

Start with 30 days free on up to 250 endpoints - no card required. Then $99/mo including 15 endpoints, $599/mo flat past 181, plus $2 for each ticket RemediateDesk actually resolves.

Get started