Если Windows-сервер тормозит, зависает в сеансе удалённого рабочего стола или процессор постоянно загружен на 100%, обычно виноват один процесс, нехватка памяти или перегруженный диск. В статье: как найти причину в Windows Server 2016, 2019, 2022 и 2025 с помощью Диспетчера задач, Монитора ресурсов и PowerShell, как отличить обычную системную активность от реальной проблемы и как распознать нежелательные программы, например майнеры криптовалют.
Нажмите Ctrl+Shift+Esc (в сеансе удалённого рабочего стола — Ctrl+Alt+End, затем выберите «Диспетчер задач»). Нажмите Подробнее (More details) и отсортируйте вкладку Процессы (Processes) или Подробности (Details) по ЦП, памяти или диску. На вкладке Подробности щёлкните правой кнопкой по заголовку столбца, выберите Выбрать столбцы (Select columns) и добавьте столбец Командная строка (Command line), чтобы видеть, что именно запускает каждый процесс.
Для более глубокого анализа откройте Монитор ресурсов (resmon). На вкладке «ЦП» видно, какие службы работают внутри каждого svchost.exe, на вкладке «Диск» — какие файлы читаются и записываются, а на вкладке «Сеть» — какой процесс с каким удалённым адресом обменивается данными.
PowerShell работает, даже когда рабочий стол отзывается слишком медленно для нормальной работы. Запустите его от имени администратора.
# Overall CPU usage, 5 samples 2 seconds apart
Get-Counter '\Processor(_Total)\% Processor Time' -SampleInterval 2 -MaxSamples 5
# Processes using the most CPU right now (percentage of total CPU)
Get-Counter '\Process(*)\% Processor Time' -ErrorAction SilentlyContinue |
Select-Object -ExpandProperty CounterSamples |
Where-Object { $_.InstanceName -notin '_total','idle' } |
Sort-Object CookedValue -Descending | Select-Object -First 10 InstanceName,
@{n='CPU%';e={[math]::Round($_.CookedValue / $env:NUMBER_OF_PROCESSORS, 1)}}
# Processes using the most memory
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 Name, Id,
@{n='RAM(MB)';e={[math]::Round($_.WorkingSet64 / 1MB)}}
# Which services run inside a busy svchost.exe (replace 1234 with its PID)
tasklist /svc /fi "PID eq 1234"
# Free physical memory and committed memory
Get-CimInstance Win32_OperatingSystem |
Select-Object @{n='TotalGB';e={[math]::Round($_.TotalVisibleMemorySize/1MB,1)}},
@{n='FreeGB';e={[math]::Round($_.FreePhysicalMemory/1MB,1)}}
# Disk activity per drive (sustained % Idle Time near 0 means the disk is the bottleneck)
Get-Counter '\LogicalDisk(*)\% Idle Time','\LogicalDisk(*)\Avg. Disk sec/Transfer' -SampleInterval 2 -MaxSamples 3
# Free space per drive
Get-PSDrive -PSProvider FileSystem | Select-Object Name,
@{n='FreeGB';e={[math]::Round($_.Free/1GB,1)}}, @{n='UsedGB';e={[math]::Round($_.Used/1GB,1)}}
Если память в строке «Используется» (In use) заполнена почти на 100%, а диск постоянно занят, сервер активно работает с файлом подкачки: добавьте оперативной памяти или уменьшите нагрузку на сервер. Почти заполненный системный диск тоже замедляет Windows и может мешать установке обновлений; см. статью о расширении диска C.
Присмотритесь внимательнее к процессу со случайным именем, к процессу, запущенному из C:\Users\Public, C:\ProgramData или временной папки, а также к неподписанному исполняемому файлу, который занимает весь процессор. Майнеры часто маскируются под svchost.exe в чужой папке; настоящий запускается только из C:\Windows\System32.
# Path, command line and digital signature of a suspicious process (replace 1234)
Get-CimInstance Win32_Process -Filter "ProcessId=1234" | Select-Object Name, ExecutablePath, CommandLine
Get-AuthenticodeSignature (Get-Process -Id 1234).Path | Select-Object Status, SignerCertificate
# svchost.exe copies running from anywhere other than System32 or SysWOW64
Get-CimInstance Win32_Process -Filter "Name='svchost.exe'" |
Where-Object { $_.ExecutablePath -notmatch 'C:\\Windows\\(System32|SysWOW64)\\' } |
Select-Object ProcessId, ExecutablePath
# Network connections per process
Get-NetTCPConnection -State Established | Group-Object OwningProcess |
Sort-Object Count -Descending | Select-Object -First 10 Count, Name
# Persistence: scheduled tasks, auto-start services and startup entries
Get-ScheduledTask | Where-Object { $_.State -ne 'Disabled' -and $_.TaskPath -notlike '\Microsoft\*' } |
Select-Object TaskName, TaskPath, @{n='Action';e={$_.Actions.Execute}}
Get-CimInstance Win32_Service | Where-Object { $_.StartMode -eq 'Auto' -and $_.PathName -notmatch 'Windows' } |
Select-Object Name, State, PathName
Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location
# Update signatures and run a full Microsoft Defender scan
Update-MpSignature
Start-MpScan -ScanType FullScan
Get-MpThreatDetection
Если вы нашли вредоносную программу, сначала удалите запланированное задание или службу, затем завершите процесс и удалите его файлы, смените все пароли и закройте путь проникновения — чаще всего это слабый пароль удалённого рабочего стола: см. статьи о защите Windows VPS и о смене порта RDP. Если есть сомнения, сохраните данные и переустановите систему.
Проблемы, которые то появляются, то исчезают, проще поймать с помощью записи. Запустите perfmon, откройте Группы сборщиков данных → Системные (Data Collector Sets → System), щёлкните правой кнопкой по Производительность системы (System Performance) и выберите Пуск (Start). После завершения сбора (примерно через минуту) в отчёте в разделе Отчеты → Системные (Reports → System) будут перечислены процессы, сильнее всего нагружающие ЦП, диск и сеть.
Включите Отображать процессы всех пользователей (Show processes from all users) и проверьте вкладку Подробности, где видны системные службы и процессы других пользователей. Некоторые вредоносные программы останавливаются при открытии Диспетчера задач; используйте команды PowerShell выше или графики ресурсов в личном кабинете IMIDC, если они доступны для вашей услуги.
Если ЦП, память и диск в норме, причина обычно в сетевом пути между вами и сервером. См. статью о решении проблем с удалённым рабочим столом и проверьте маршрут командами ping и tracert.
Если ваши собственные приложения при обычном трафике закономерно занимают большую часть ЦП или оперативной памяти, оптимизация надолго не поможет. Перейдите на более мощный тариф или вынесите базу данных на второй сервер.
Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP сервера, версию Windows Server, имя нагружающего процесса и приложите скриншот Диспетчера задач или вывод PowerShell, чтобы мы быстрее нашли причину.