Windows Server

Windows Server грузит процессор, память или диск: как найти причину и скрытый майнер

6 шагов 18 мин чтения 13 просмотров 0
Содержание

Если Windows-сервер тормозит, зависает в сеансе удалённого рабочего стола или процессор постоянно загружен на 100%, обычно виноват один процесс, нехватка памяти или перегруженный диск. В статье: как найти причину в Windows Server 2016, 2019, 2022 и 2025 с помощью Диспетчера задач, Монитора ресурсов и PowerShell, как отличить обычную системную активность от реальной проблемы и как распознать нежелательные программы, например майнеры криптовалют.

Не завершайте незнакомые процессы, пока не проверите их. Остановка системных процессов, таких как csrss.exe, lsass.exe или winlogon.exe, приводит к сбою сервера или завершению сеанса. Сначала запишите имя процесса, PID и путь к файлу.

Шаг 1: Общая картина в Диспетчере задач

Нажмите Ctrl+Shift+Esc (в сеансе удалённого рабочего стола — Ctrl+Alt+End, затем выберите «Диспетчер задач»). Нажмите Подробнее (More details) и отсортируйте вкладку Процессы (Processes) или Подробности (Details) по ЦП, памяти или диску. На вкладке Подробности щёлкните правой кнопкой по заголовку столбца, выберите Выбрать столбцы (Select columns) и добавьте столбец Командная строка (Command line), чтобы видеть, что именно запускает каждый процесс.

Для более глубокого анализа откройте Монитор ресурсов (resmon). На вкладке «ЦП» видно, какие службы работают внутри каждого svchost.exe, на вкладке «Диск» — какие файлы читаются и записываются, а на вкладке «Сеть» — какой процесс с каким удалённым адресом обменивается данными.

Шаг 2: Поиск нагружающего процесса через PowerShell

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"

Шаг 3: Проверка памяти и диска

# 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.

Шаг 4: Что считается нормой

  • TiWorker.exe / TrustedInstaller.exe: Центр обновления Windows устанавливает или очищает компоненты. Высокая загрузка ЦП в течение 10–60 минут после обновлений — это нормально; дождитесь завершения (см. статью об управлении обновлениями Windows).
  • MsMpEng.exe: проверка Microsoft Defender. Высокая нагрузка во время сканирования ожидаема. Если нагруженное приложение постоянно провоцирует проверки, добавьте узкое исключение для его папки с данными, а не отключайте Defender.
  • Кэшированная память (Standby): Windows использует свободную оперативную память как файловый кэш и мгновенно освобождает её, когда она нужна программам. Значение имеет только память в строке «Используется».
  • sqlservr.exe, w3wp.exe, java.exe, node.exe: ваши базы данных и приложения. Высокая нагрузка здесь говорит о росте трафика, медленных запросах или утечке в самом приложении.

Шаг 5: Поиск нежелательных программ

Присмотритесь внимательнее к процессу со случайным именем, к процессу, запущенному из 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. Если есть сомнения, сохраните данные и переустановите систему.

Шаг 6: Длительная запись в Системном мониторе

Проблемы, которые то появляются, то исчезают, проще поймать с помощью записи. Запустите perfmon, откройте Группы сборщиков данных → Системные (Data Collector Sets → System), щёлкните правой кнопкой по Производительность системы (System Performance) и выберите Пуск (Start). После завершения сбора (примерно через минуту) в отчёте в разделе Отчеты → Системные (Reports → System) будут перечислены процессы, сильнее всего нагружающие ЦП, диск и сеть.

Частые вопросы

Процессор загружен на 100%, а в Диспетчере задач ничего не видно

Включите Отображать процессы всех пользователей (Show processes from all users) и проверьте вкладку Подробности, где видны системные службы и процессы других пользователей. Некоторые вредоносные программы останавливаются при открытии Диспетчера задач; используйте команды PowerShell выше или графики ресурсов в личном кабинете IMIDC, если они доступны для вашей услуги.

Сервер тормозит только в удалённом рабочем столе

Если ЦП, память и диск в норме, причина обычно в сетевом пути между вами и сервером. См. статью о решении проблем с удалённым рабочим столом и проверьте маршрут командами ping и tracert.

Когда лучше перейти на более мощный тариф, а не оптимизировать?

Если ваши собственные приложения при обычном трафике закономерно занимают большую часть ЦП или оперативной памяти, оптимизация надолго не поможет. Перейдите на более мощный тариф или вынесите базу данных на второй сервер.

Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP сервера, версию Windows Server, имя нагружающего процесса и приложите скриншот Диспетчера задач или вывод PowerShell, чтобы мы быстрее нашли причину.

Помог ли вам данный ответ?

Похожие руководства