Windows Server

Uso alto de CPU, memoria o disco en Windows Server: cómo encontrar la causa con PowerShell

6 pasos 19 min de lectura 23 vistas 0
Contenido

Un servidor Windows que va lento, se congela en el Escritorio remoto o muestra la CPU al 100 % de forma constante suele estar sobrecargado por un solo proceso, por la memoria llena o por un disco saturado. Esta guía explica cómo encontrar la causa en Windows Server 2016, 2019, 2022 y 2025 con el Administrador de tareas (Task Manager), el Monitor de recursos y PowerShell, cómo distinguir la actividad normal del sistema de un problema real y cómo detectar programas no deseados, como los mineros de criptomonedas.

No finalice procesos que no reconozca sin haberlos comprobado antes. Detener procesos del sistema como csrss.exe, lsass.exe o winlogon.exe provoca un fallo del servidor o cierra la sesión. Anote primero el nombre del proceso, el PID y la ruta del archivo.

Paso 1: Obtener una visión general con el Administrador de tareas

Presione Ctrl+Shift+Esc (dentro del Escritorio remoto, use Ctrl+Alt+End y elija el Administrador de tareas). Haga clic en Más detalles (More details) y ordene la pestaña Procesos (Processes) o Detalles (Details) por CPU, memoria o disco. En la pestaña Detalles, haga clic con el botón derecho en un encabezado de columna, elija Seleccionar columnas (Select columns) y añada Línea de comandos (Command line) para ver exactamente qué ejecuta cada proceso.

Para un análisis más profundo, abra el Monitor de recursos (Resource Monitor, resmon). Su pestaña CPU muestra qué servicios se ejecutan dentro de cada svchost.exe, la pestaña Disco muestra qué archivos se están leyendo y escribiendo, y la pestaña Red muestra qué proceso se comunica con qué dirección remota.

Paso 2: Encontrar el proceso que consume recursos con PowerShell

PowerShell funciona incluso cuando el escritorio va demasiado lento para usarlo con comodidad. Ejecútelo como administrador.

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

Paso 3: Comprobar la memoria y el disco

# 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)}}

Si la memoria "En uso" (In use) está cerca del 100 % y el disco tiene actividad constante, el servidor está paginando a disco: añada RAM o reduzca lo que se ejecuta en él. Una unidad del sistema casi llena también ralentiza Windows y puede impedir las actualizaciones; consulte cómo ampliar la unidad C.

Paso 4: Saber qué es normal

  • TiWorker.exe / TrustedInstaller.exe: Windows Update está instalando o limpiando componentes. Un uso alto de CPU durante 10–60 minutos después de las actualizaciones es normal; deje que termine (consulte cómo administrar Windows Update).
  • MsMpEng.exe: Microsoft Defender está realizando un análisis. Es normal que la carga sea alta durante el análisis. Si una aplicación con mucha actividad provoca análisis constantemente, añada una exclusión limitada a su carpeta de datos en lugar de desactivar Defender.
  • Memoria en espera (en caché): Windows usa la RAM libre como caché de archivos y la libera al instante cuando los programas la necesitan. Solo importa la memoria "En uso".
  • sqlservr.exe, w3wp.exe, java.exe, node.exe: son sus bases de datos y aplicaciones. Un uso alto en estos procesos apunta a tráfico, consultas lentas o una fuga de memoria en la propia aplicación.

Paso 5: Buscar programas no deseados

Merece la pena examinar con más detalle un proceso con un nombre aleatorio, uno que se ejecute desde C:\Users\Public, C:\ProgramData o una carpeta temporal, o un ejecutable sin firma que acapare toda la CPU. Los mineros de criptomonedas suelen camuflarse como svchost.exe en una carpeta que no le corresponde; el auténtico solo se ejecuta desde 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

Si encuentra malware, elimine primero la tarea programada o el servicio, después finalice el proceso y borre sus archivos, cambie todas las contraseñas y cierre la vía de entrada, que la mayoría de las veces es una contraseña débil de Escritorio remoto: consulte cómo reforzar la seguridad de un VPS con Windows y cómo cambiar el puerto RDP. En caso de duda, haga una copia de seguridad de sus datos y reinstale el sistema.

Paso 6: Registrar un seguimiento más largo con el Monitor de rendimiento

Los problemas intermitentes son más fáciles de detectar con una grabación. Ejecute perfmon, abra Conjuntos de recopiladores de datos → Sistema (Data Collector Sets → System), haga clic con el botón derecho en Rendimiento del sistema (System Performance) y elija Iniciar (Start). Cuando termine (aproximadamente un minuto), el informe de Informes → Sistema (Reports → System) muestra los procesos que más CPU, disco y red consumen.

Preguntas frecuentes

¿La CPU está al 100 %, pero el Administrador de tareas no muestra nada ocupado?

Active Mostrar procesos de todos los usuarios (Show processes from all users) y revise la pestaña Detalles, donde aparecen los servicios del sistema y los procesos de otros usuarios. Además, algunos programas maliciosos se detienen al abrir el Administrador de tareas; use los comandos de PowerShell anteriores o los gráficos de recursos del área de cliente de IMIDC, si su producto los ofrece.

¿El servidor solo va lento en el Escritorio remoto?

Si la CPU, la memoria y el disco parecen normales, la causa suele estar en la ruta de red entre usted y el servidor. Consulte la solución de problemas de Escritorio remoto y pruebe la ruta con ping y tracert.

¿Cuándo conviene ampliar el plan en lugar de optimizar?

Si sus propias aplicaciones usan legítimamente la mayor parte de la CPU o de la RAM con el tráfico normal, la optimización no servirá durante mucho tiempo. Amplíe el plan o traslade la base de datos a un segundo servidor.

¿Sigue sin resolverlo después de seguir estos pasos? Abra un ticket de soporte y el equipo técnico de IMIDC, disponible 24/7, le ayudará. Incluya la IP del servidor, la versión de Windows Server, el nombre del proceso que consume recursos y una captura de pantalla del Administrador de tareas o la salida de PowerShell para que podamos localizar el problema más rápido.

¿Fue útil la respuesta?

Tutoriales relacionados