6 votos

Cómo controlar el uso de CPU de ntoskrnl.exe! MiWalkPageTablesRecursively

Siguiendo el post de seguimiento de alto uso de CPU por el kernel, yo pensé que había depurado de una cuestión que ha venido afectando a mí, a saber 20-30% consistente el uso de CPU por proceso del Sistema. Ver mi post anterior acerca de él.

Yo el programa de instalación de Windows Analizador de Rendimiento y fue capaz de rastrear el proceso a esto: WPA Trace Log Pensé que tenía que hacer con el archivo de la Página de adivinar por los nombres de función y movilidad de mi archivo de página, y se reinicia, pero windows en lugar de tener una página de archivo y tiró un error. Así que he creado un pequeño archivo de paginación alrededor de 100 mb - 2048MB.

Que parecía haber resuelto el problema de un par de semanas, pero ahora está aquí de nuevo, aunque el archivo de paginación es sólo 2GB. Esto parece ocurrir después de que el sistema ha estado en funcionamiento por un tiempo. Tiempo de funcionamiento actual es de 8 días.

Si cualquier núcleo de expertos puede dar consejos sobre lo que debe tratar la siguiente, yo estaría feliz de hacerlo.

Sin embargo Process Explorer muestra un subproceso diferente bajo la imagen del sistema. No sé cómo conciliar esta diferencia:

InitAnsiStringEx

Process explorer general, muestra que el anterior, aunque en otras ocasiones puede mostrar depuración de filtro de estado, etc ...

enter image description here

(Siempre ThreadID 56 creo) Pero los varios registros de seguimiento siempre parecen mostrar lo que hemos visto anteriormente como la cuestión.

EDITAR

Imágenes añadidas como la solicitada para la memoria RAM. Esto es después de una nueva reinicie donde el problema no existe.

RAM Usage Process Details working set

La configuración de rutas de acceso de símbolos como se recomienda por el Blog para acelerar la carga de símbolos

Process Explorer

procexp symbols path

WPA

WPA symbols path

El tamaño de los archivos de las carpetas de caché

symbols info

Varias versiones de dbghelp.dll encuentra en el sistema. Actualmente señaló sistema, pero no sé a que se debe señalar.

dbghelp.dll versions


ACTUALIZACIÓN

Después de seguir el enlace para la búsqueda de Procesos Zombi, descubrí los siguientes datos (trunca a quitar menor entradas)

374 total zombie processes.
334 zombies held by explorer.exe(1768)
    298 zombies of Fences.exe
    9 zombies of LogonUI.exe
    7 zombies of chrome.exe
10 zombies held by ctfmon.exe(4568)
    2 zombies of chrome.exe
7 zombies held by dopus.exe(27672)
    3 zombies of AcroRd32.exe
2 zombies held by RuntimeBroker.exe(12184)
    2 zombies of WWAHost.exe
1 zombie held by SkypeHost.exe(190152)
    1 zombie of SkypeApp.exe
1 zombie held by SecurityHealthService.exe(4536)
    1 zombie of MsMpEng.exe
1 zombie held by svchost.exe(1988)
    1 zombie of userinit.exe

Esto implica que FENCES.exe fue la causa, así que he actualizado que programa y comprobar de nuevo más tarde. También se desactiva la sinergia para asegurarse de que no era la causa.

nota al margen

¿No sería genial si tuviéramos software de IA que sería capaz de ayudar con todas estas cosas?

7voto

Jamie Hanrahan Puntos 8474

La respuesta rápida: Dar de rutina con menos trabajo que hacer. Que yo creo que significa utilizar menos espacio de direcciones virtuales a la vez, o agregar más memoria RAM.

Detalles: en Primer lugar, la rutina que estamos viendo, MiWalkPageTablesRecursively, poco tiene que ver con el archivo de página directamente, sino más bien con la página de las tablas. La página de las tablas son estructuras en memoria (y están presentes en todos los sistemas Windows, independientemente de archivo de paginación de configuración). Cada proceso tiene un conjunto de tablas de la página, y hay un conjunto para el sistema operativo del espacio de direcciones ("el espacio del kernel").

La página de las tablas se componen de entradas de tabla de página; hay un PTE de página para cada página - 4K - en el proceso definido del espacio de direcciones virtuales. Por "definido", quiero decir que se incluye el proceso asignado y privados comprometidos espacio de direcciones, y el TEMOR regiones, si los hubiere; no incluye la reserva o el libre espacio de direcciones - regiones que se iba a producir una infracción de acceso si se trató de leer o escribir en ellos.

(Por cierto: No sólo usted todavía tiene tablas de la página, incluso si usted no tiene un archivo de paginación. Usted también todavía tiene paginación, y los fallos de página desde el disco, incluso si usted no tiene un archivo de paginación.)

El problema aquí es probable que no es inherente a MiWalkPageTablesRecursively. Después de todo esta función (o un equivalente con otro nombre) ha sido parte de Windows desde NT 3.1. Es en el hecho de que es tener que hacer un montón de trabajo. Esto probablemente significa que es invocada a menudo.

Una pista de por qué este es el caso que se ve en las rutinas anteriores en la pila. (Es decir, más cerca de la parte superior de la WPA de la visualización). Parece que el autor de la llamada de MiWalkPageTablesRecursively en este escenario es MiWalkPageTables, que a su vez es llamado por MiAgeWorkingSet, que a su vez es llamado por MiTrimOrAgeWorkingSet, que a su vez es llamado por MiProcessWorkingSets, que a su vez es llamado por ... que tan lejos como tenemos que ir.

Cada proceso en un sistema Windows dispone de una estructura llamada un "conjunto de trabajo de la lista". Esta es una lista de todos los números de las páginas físicas que han sido fallados en la memoria RAM como el resultado de un proceso de fallos de página. El hilo (el "Saldo de Administrador de Conjunto de la" rosca) se despierta una vez cada segundo para hacer la limpieza y mantenimiento en cada proceso de trabajo conjunto. Por lo MiProcessWorkingSets itera a través de los procesos, trato con cada uno de los procesos de trabajo en turno.

Para cada proceso en el sistema, MiProcessWorkingSets llamadas MiTrimOrAgeWorkingSet. Esta rutina de nombre se refiere a "recortar" un conjunto de trabajo (lo que significa que la identificación de largo desuso páginas y desalojarlos de el proceso para hacer espacio en la memoria RAM para otras cosas), o "envejecimiento" el conjunto de trabajo, lo que significa que el incremento de la "edad" del contador en cada conjunto de trabajo de entrada de la lista que no ha sido consultado desde la última vez que se ha analizado, o poner a cero el contador si lo ha sido. (El nombre se refiere al "envejecimiento" de la tarea que se realiza en la contabilidad, por lo general cada mes o cada día). La "edad" contador es utilizada por el "recorte" de la función de identidad de la mayoría en desuso páginas.

El hecho de que MiTrimOrAgeWorkingSet termina en MiWalkPageTablesRecursively, podemos inferir que se están explorando el espacio de direcciones virtuales como se define por las tablas de la página para encontrar las páginas que están en el conjunto de trabajo. Ahora considere esto: El tiempo que necesite MiTrimOrAgeWorkingSet a controlar cada proceso será aproximadamente proporcional al tamaño de la proceso del espacio de direcciones virtuales. Y el tiempo total necesario para cada paso a través de la MiProcessWorkingSets será aproximadamente proporcional al número de procesos.

Esta cosa es tratar con un gran número de páginas en un proceso conjunto de trabajo, o de lo contrario es tener que lidiar con una gran cantidad de procesos.

Y... ¿por qué sería tan ocupado? No se "recorte" de los conjuntos de trabajo, hasta que haya sido envejecido, y la cantidad por la que se "recorta" los conjuntos de trabajo depende de la memoria RAM de la presión, es decir, cómo de corto está en la memoria RAM.

Es el sistema a corto en RAM? Por favor enviar fotos de Rendimiento del Administrador de Tareas de la pestaña de la página de Memoria, además de la página de Detalles ordenados por el conjunto de Trabajo de la columna; además de que el Monitor de Recursos de Memoria de la ficha, ordenados por el Duro Fallos de la columna; y RAMmap del Uso de la Cuenta de la página.

También, por favor, puesto que más de la WPA de seguimiento tiene, mostrando más "profundidad" de las llamadas. O el post .archivo etl en un servicio de uso compartido en algún lugar y un enlace a ella aquí. (Zip primera comprimen muy bien.)

Por qué rutina de los nombres no coinciden entre WPA y Process Explorer

Como para los nombres de rutina, hay dos razones de la discrepancia. La primera es que parece que no tiene símbolos configurado correctamente para el Proceso Explorer. La configuración para Windows Analizador de Rendimiento no es suficiente.

Un signo seguro de que usted no tiene este derecho es que todos o casi todos los hilos en el "Sistema" de la demostración del proceso con el nombre de un módulo (something.sys o something.exe, generalmente ntoskrnl.exe), seguido por un desplazamiento, tales como +0x245 - como en su tapa de pantalla.

Para solucionar este problema, consulte esta página de el Rendimiento de Windows Análisis de la Guía de Campo. Usted necesita para establecer el Proceso de Explorer a la ruta de búsqueda de símbolos - se puede utilizar el mismo símbolo de la ruta de acceso del archivo que se haya establecido para WPA - y usted necesita a punto de ProcExp en una DLL que viene con las Herramientas de Depuración de Windows. Así que usted tendrá que tener las Herramientas de Depuración instalados - no se de que estás usando el depurador directamente, pero el Proceso de Explorer necesita que el archivo DLL.

La segunda razón de la discrepancia es que, incluso después de tener el símbolo de archivos configurados correctamente para el Proceso de Explorador, los nombres de rutina muestra no suelen coincidir con los nombres de su interior, una rutina de nivel identificado por el Analizador de Rendimiento. Usted debe encontrar un partido, a pesar de que, en nombre de la rutina cerca del principio de la pila (que aparece en la parte superior de la rutina llamada árbol, como se muestra en WPA).

Por ejemplo - en el caso de que la primera rutina de interés es KeBalanceSetManager. (Los dos antes de que son los mismos para cada subproceso en el proceso del sistema, pero KeBalanceSetManager es la rutina que el "nivel superior" de rutina para este hilo.) Una vez que haya símbolos configurado correctamente, el Proceso de Explorador debe mostrar un hilo con que como la "Dirección de Inicio", como se muestra aquí:

here

Process Explorer no puede mostrar MiWalkPageTablesRecursively debido a que es de alrededor de seis llamadas en la pila de lo que se registra como el hilo de la Dirección de Inicio, y ni siquiera es la corriente más profundo de rutina (es decir, no en la parte superior de la pila). Dicha información (incluso si están fácilmente disponibles, que no lo es) iba a cambiar demasiado rápidamente para ser útil en un Proceso de presentación del Explorador, así que no intente.

Nota: Incluso con símbolos correctos, no es raro encontrar algunos de los subprocesos en el proceso del sistema, mostrando la "Dirección de Inicio" de, por ejemplo, GemCCID.sys+0xd138, como verás en mi ejemplo. El módulo en cuestión (GemCCID.sys) evidentemente no es uno para el que Microsoft proporciona los archivos de símbolos, por lo que el Proceso de Explorer sólo tiene que decir "el hilo de la dirección de inicio es en 0xd138 bytes desde el inicio del código en este archivo, y eso es todo lo que sé acerca de él."

Espero que esto ayude! Por favor, hágamelo saber si usted tiene más preguntas.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X