asp.net - solicitud - Cómo prevenir el uso de la CPU al 100% debido al proceso de trabajo en iis
optimizar pool de conexiones iis (6)
La mayoría de las veces, el uso de mi CPU es el 100% del tiempo en Windows Server 2008-R2 con mis propios vps, vmware, quad core y 4GB de RAM. Cuando abro el Administrador de tareas de Windows y voy al monitor de recursos, veo que el uso del 100% se debe a workerprocess.exe
. Tengo 3 sitios web en mi IIS.
- ¿Cómo puedo averiguar qué sitio web causa ese uso?
- ¿Cómo puedo limitarlo al 80% de uso de la CPU?
- ¿Podría ser un ataque DDOS?
- ¿Hay alguna manera de prevenir DDOS?
Instalé eset-nod32 en mi vps, pero no muestra ningún ataque en los registros. He intentado buscar sobre IIS y prevenir DDOS, y acabo de encontrar una extensión para prohibir las direcciones IP, pero ¿cómo puedo encontrar qué dirección IP está generando tráfico?
El sitio web está escrito en ASP.NET
y C#
. ¿Cómo puedo determinar qué está sucediendo en ese sitio web y qué líneas de códigos están causando el uso de la CPU?
Además, uno de mis sitios web debe acceder al escritorio del administrador y leer y escribir algunos archivos. Por eso cambié su grupo de aplicaciones -> identidad (Modelo de proceso) al sistema local, y no sé si está relacionado con el uso de la CPU o no.
Diagnosticando
En términos de diagnosticar qué grupo de aplicaciones está causando problemas, puede:
- Selecciona el servidor
- Ir a IIS> Procesos de trabajo
Esto debería mostrar un menú como este para que pueda determinar qué grupo de aplicaciones se está ejecutando de forma irregular.
Desde allí, simplemente puede reiniciar el grupo de aplicaciones y 9 veces de cada 10 que solucionarán cualquier problema inmediato que tenga.
Tratar
A menos que ejecute algún tipo de negocio controvertido, esto probablemente no sea un ataque DDOS. Es probable que algún código simplemente se cuelgue porque no pudo llegar a otro servidor o se atoró en un bucle o se asignaron incorrectamente los recursos o su grupo de aplicaciones simplemente no se ha reciclado por un tiempo.
Puede resolver este problema mediante programación sin tener que identificar manualmente, iniciar sesión y reciclar el grupo de aplicaciones. Simplemente configure la propiedad de la CPU en su grupo de aplicaciones. Puede hacer que anule (y reinicie automáticamente) su proceso cada vez que alcance un umbral de CPU durante un cierto tiempo.
En su caso, si desea que se reinicie al 80%, puede hacer clic derecho en el grupo de aplicaciones, ir a Configuración avanzada y aplicar las siguientes configuraciones:
NOTA : como señaló kraken101 , diferentes GUI de IIS han tratado esto de manera diferente a lo largo del tiempo. Mientras que el valor de configuración siempre está en 1/1000 de un%, a veces la GUI toma el porcentaje completo.
Puedes agregar esto a tu sección de configuración de esta manera:
<applicationPools>
<add name="DefaultAppPool">
<cpu limit="80000" action="KillW3wp" resetInterval="00:01:00" />
</add>
</applicationPools>
Alternativamente, puede escribirlo con el Módulo de Administración Web de Powershell de la siguiente manera:
(* asegúrese de que las herramientas de scripting web estén habilitadas )
Import-Module WebAdministration
$appPoolName = "DefaultAppPool"
$appPool = Get-Item "IIS:/AppPools/$appPoolName"
$appPool.cpu.limit = 80000
$appPool.cpu.action = "KillW3wp"
$appPool.cpu.resetInterval = "00:01:00"
$appPool | Set-Item
Previniendo
Los pasos anteriores ayudarán a solucionar algunas cosas una vez que se hayan roto, pero realmente no resolverán los problemas subyacentes que tenga.
Aquí hay algunos recursos para hacer monitoreo de rendimiento:
Bueno, esto puede tomar mucho tiempo para averiguar. Pocos puntos para reducirlo:
- Identifica lo que está matando a la CPU. Recomiendo Process Explorer http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
- Identificar qué está causando AppPool esto
- Arregla tu código
Hace poco me enfrenté a los mismos problemas y encontré una solución que funcionó para mí y redujo el nivel de consumo de memoria en gran medida.
Solución:
En primer lugar, encuentre la aplicación que está causando un uso intensivo de la memoria.
Puede encontrar esto en la sección Detalles del Administrador de tareas.
Siguiente.
- Abra el administrador de IIS .
- Haga clic en Grupos de aplicaciones . Encontrará muchos grupos de aplicaciones que utiliza su sistema.
- Ahora, desde el administrador de tareas, descubrió qué aplicación está causando el gran consumo de memoria. Habría múltiples opciones para eso y debe seleccionar la que tiene ''1'' en la columna de Aplicación de su aplicación web.
- Al hacer clic en el grupo de aplicaciones en el lado derecho, verá una opción Configuración avanzada en Editar grupos de aplicaciones. Ir a la configuración avanzada. 5.Ahora, en la categoría General, establezca Activar aplicaciones de 32 bits en Verdadero
- Reinicie el servidor IIS o puede ver que el consumo disminuye en la sección de rendimiento de su Administrador de tareas.
Si esta solución funciona para usted, por favor agregue un comentario para que yo pueda saberlo.
Recientemente tuve este problema, y una vez que determiné qué AppPool estaba causando el problema, la única forma de resolver el problema era eliminar ese grupo de aplicaciones completamente y crear uno nuevo para que lo use el sitio.
Utilice procmon para definir su problema.
Utilice PerfMon para recopilar datos y DebugDiag para analizar.
Encontré este enlace mientras buscaba un problema similar.