2012-05-31 17 views
5

¿Es posible usar ETW para obtener estadísticas de memoria de todos los procesos y el sistema? Con estadísticas de memoria quiero decir: p. Bytes comprometidos, bytes privados, grupo paginado, conjunto de trabajo, ...¿Se puede usar ETW (seguimiento de eventos para Windows) para recopilar también estadísticas de memoria?

No puedo encontrar nada sobre el uso de xperf para obtener y ver las estadísticas de memoria. Siempre se trata de CPU, disco, red.

Uno probablemente podría usar contadores de rendimiento para obtener ese tipo de información, pero ¿cómo se pueden superponer las estadísticas gráficamente en un gráfico (cómo correlacionar/sincronizar las marcas de tiempo)?

Respuesta

6

Su mejor apuesta en Windows 8.1 y superior es el proveedor Microsoft-Windows-Kernel-Memory, que registra la información de memoria por proceso cada 0.5 s. Ver https://github.com/google/UIforETW/issues/80 para más detalles. UIforETW habilita esto de forma predeterminada cuando está disponible.

También puede probar el proveedor de MEMINFO. Ofrece una visión general de todo el sistema de la presión de la memoria. Muestra la lista activa (memoria actualmente en uso), la lista de espera (páginas 'útiles' que no están actualmente en uso, como la memoria caché de disco) y las listas cero y gratuito (memoria genuinamente libre). Esto al menos le permite saber si un sistema se está quedando sin memoria.

También podría probar MEMINFO_WS y CONTMEMGEN, pero estos no están documentados, así que realmente no sé lo que hacen. Aparecen en xperf -providers k pero cuando grabo con ellos no puedo ver ningún gráfico nuevo que aparezca. Aparentemente Microsoft envía estos proveedores pero no hay forma de verlos. Suspiro ...

Si desea más detalles de la memoria en Windows 7, como los conjuntos de trabajo por proceso, su mejor opción es tener un proceso en ejecución que periódicamente consulte estos datos y los emita en eventos ETW personalizados. Esto está disponible en un formulario preempaquetado en UIforETW que puede consultar el conjunto de trabajo de un conjunto específico de procesos una vez por segundo. Consulte la publicación del anuncio de cómo obtener UIforETW: https://randomascii.wordpress.com/2015/04/14/uiforetw-windows-performance-made-easier/

Los datos del conjunto de trabajo de Windows 7 de UIforETW aparecen en Eventos genéricos en Nombre de tarea == Grupo de trabajo. En Windows 8.1, se muestra el conjunto de datos de funcionamiento del sistema operativo (más detallado, más eficientemente registrado) en Memoria-> Instantáneas de memoria virtual.

2

Puede rastrear el uso de memoria con ReferenceSet kernel group. Incluye los siguientes TRACEFLAGS:

PROC_THREAD+LOADER+HARD_FAULTS+MEMORY+FOOTPRINT+VIRT_ALLOC+MEMINFO+VAMAP+SESSION+REFSET+MEMINFO_WS 

la memoria = trazando

HUELLA + análisis = huella de Apoyo CONJREF

meminfo = Memoria Información de la lista (activo, de reserva y oters que se ve desde resmon)

VIRT_ALLOC = Reserva de asignación virtual y versión

VAMAP = información de archivos asignados

MEMINFO_WS = conjunto de trabajo Info

Como se puede ver xperf puede capturar una gran cantidad de datos de la memoria cuando demanda a las banderas correctas.

+1

Sí, puede capturar una gran cantidad de datos, pero ¿cómo lo hacemos para * mostrar * esos datos, o extraerlos de otra manera? En particular, no puedo encontrar ninguna forma de mostrar los datos de MEMINFO_WS. En la sección Memoria de WPA, puedo ver la Utilización de la memoria (listas activas/modificadas/etc.), las fallas duras, las duraciones del Comando VirtualAlloc, los gráficos de grupo y el conjunto de residentes. El conjunto residente parece el más útil, pero parece mostrar información de REFSET, entonces, ¿qué muestra MEMINFO_WS? –

+1

El Conjunto residente solo parece captar una instantánea al final de la traza, por lo que es deficiente para detectar tendencias en el transcurso de una traza. Creo que realmente necesitamos datos de MEMINFO_WS. –

Cuestiones relacionadas