Tengo un sistema HP ProLiant DL380 G7 que usa 2 CPU de 6 núcleos, con Hyper-threading habilitado, para un total de 24 CPU lógicas (como lo ve Windows).
Al ejecutar nuestra aplicación, la utilización total de la CPU del sistema es buena, pero uno de los 24 CUP está vinculado al 100%:
Editar: estos son los datos de PerfMon para el proceso del sistema durante este tiempo y para el procesador con alta utilización:
¿Esto es normal? Si no, ¿hay alguna manera de identificar qué proceso (s) están usando esa CPU lógica? Windows PerfMon, ResMon, Task Manager y Process Explorer no han sido de ayuda, aparte de identificar que la CPU está al 100%.
windows-server-2008-r2
performance
cpu-usage
Patrick Cuff
fuente
fuente
Respuestas:
Como otros ya han señalado, podemos ver en esa captura de pantalla que la CPU que está trabajando tan duro está pasando todo su tiempo en modo kernel. (El color rojo).
Ejecutando Powershell como administrador, escriba:
El proceso en la parte superior de la lista es el proceso que actualmente utiliza la mayor cantidad de tiempo de CPU en modo kernel en este momento. Si ese proceso no es "Sistema", acaba de descubrir qué proceso de modo de usuario está causando el uso de esta CPU. Si el proceso con el mayor tiempo de procesador privilegiado es el sistema, que sospecho que es, entonces es un poco más complicado.
Abra el Explorador de procesos. Opcionalmente, configure su servidor de símbolos. Asegúrese de estar ejecutando con la elevación completa de UAC. Haga clic derecho en el "proceso" del sistema y vaya a Propiedades. Luego vaya a la pestaña Hilos. Ordenar los hilos por uso de CPU. El hilo que está causando todo este trabajo en modo kernel debería estar aquí. Si observa el módulo que figura en la Dirección de inicio, debería darle una pista de lo que está relacionado el trabajo. Si es NDIS.sys, por ejemplo, es un controlador de interfaz de red. Si configura el servidor de símbolos, debería ver el nombre de una función dentro de un módulo (a menos que el módulo no sea Microsoft), de lo contrario, verá un desplazamiento numérico desde la dirección de inicio del módulo.
Alternativamente, use Xperf del Kit de herramientas de rendimiento de Windows para perfilar interrupciones, DPC, etc.
y deja de grabar con
xperf -d logfile.etl
Xperf reemplaza la antigua herramienta Kernrate y puede proporcionarle datos extremadamente detallados.
Cuando una CPU está trabajando en modo kernel, está ejecutando principalmente rutinas de servicio de interrupción. (ISR) Cuando se produce una interrupción, el trabajo en modo de usuario se suspende en ese procesador y la CPU ejecuta el ISR registrado en esa interrupción. Si encuentra que su CPU pasa una cantidad excesiva de tiempo en estas interrupciones, eso generalmente indica un controlador de dispositivo defectuoso que debe actualizarse.
Sin embargo, lo que me molesta (sin juego de palabras) sobre este escenario es que parece que cualquier hilo del núcleo que esté haciendo esto parece estar afinado a ese núcleo. Me pregunto por qué el despachador parece estar programando solo el hilo para que se ejecute en ese núcleo aparentemente arbitrario. Por lo tanto, tengo la sensación de que necesitamos encontrar a quien escribió este controlador de dispositivo y mostrarles cómo hacer DPC roscados, y no establecer explícitamente una afinidad en los hilos del núcleo, etc.
fuente
Muestre la columna "Tiempo de CPU" en la pestaña "Detalles" en "Administrador de tareas" y busque un proceso con un recuento de tiempo de CPU que aumenta constantemente. Ese es tu proceso en cuña. Debería estar usando alrededor de 4.17% de CPU constantemente.
fuente
Parece ser todo el tiempo del kernel, podrían ser interrupciones, solo podrían ser manejados por una sola CPU.
fuente
Busque un proceso con una utilización constante de CPU de ~ 4% (= 1/24 del total de CPU disponible). Ese debería ser el que toma continuamente una sola CPU.
fuente