Abilitazione dell'acquisizione dei dati dell'heap
L'analisi dell'heap dei processi è più efficace quando gli stack vengono raccolti acquisendo eventi HeapAlloc e HeapRealloc . Per decodificare gli stack con i simboli, è necessario abilitare la decodifica dei simboli. È possibile acquisire i dati dell'heap all'avvio di un processo o in un processo esistente.
Per abilitare l'acquisizione dei dati all'avvio di un processo
In questo esempio viene avviato il processo analizzato dalla sequenza della riga di comando che avvia l'acquisizione dei dati. L'abilitazione dell'acquisizione dei dati all'avvio di un processo garantisce che non si verifichi alcuna perdita di informazioni o cronologia di allocazione. Per abilitare l'acquisizione dati all'avvio del processo, seguire questa procedura:
Da un prompt dei comandi con privilegi elevati digitare il comando seguente:
xperf -on Base -BufferSize 1024 -MinBuffers 10 -MaxBuffers 16
Di seguito è riportato un comando di esempio:
xperf -start HeapSession -heap -PidNewProcess "C:\Program Files\Windows Sidebar\sidebar.exe" -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc
La barra laterale si apre sul desktop.
Nella tabella seguente vengono descritti questi comandi.
Comando Descrizione -start HeapSession
Inizializza una sessione di traccia o un logger. In questo caso la sessione è denominata "HeapSession".
-Heap
Identifica "HeapSession" come traccia dell'heap.
-PidNewProcess
Inizializza un processo. In questo caso, inizializza la barra laterale di Windows.
-Buffersize
Imposta le dimensioni del buffer del buffer in cui vengono archiviati i dati dell'evento. Una dimensione ottimale per un buffer è 1024 KB. Il valore predefinito è 64 KB.
-MinBuffers
Imposta il numero minimo di buffer per l'archiviazione dei dati degli eventi. MinBuffers deve essere uguale a MaxBuffers per garantire la coerenza tra le tracce.
-MaxBuffers
Allocare MaxBuffers in modo conservativo, perché i buffer vengono allocati dalla memoria non di paging, ovvero una risorsa di sistema limitata.
-stackwalk
Inizializza la struttura stackwalk per raccogliere informazioni di allocazione e deallocazione e associare tali informazioni a thread specifici.
HeapAlloc+HeapRealloc
Identifica eventi heap specifici da acquisire e presentare dalla struttura stackwalk.
Digitare il comando seguente:
xperf -stop -stop HeapSession -d HeapTrace.etl
Il
-d HeapTrace.etl
comando unisce le tracce generate nella sessione nel file HeapTrace.etl.
Per abilitare l'acquisizione dati in un processo esistente
Questa opzione abilita l'acquisizione dei dati senza arrestare e riavviare il processo. Questo può essere vantaggioso quando lo scenario analizzato non si verifica fino a quando non viene avviato correttamente l'applicazione e l'allocazione dell'heap iniziale (che può generare file di traccia estremamente grandi) non è necessaria.
Seguire questa procedura:
Da un prompt dei comandi con privilegi elevati avviare NT Kernel Logger con il flag BASE come indicato di seguito:
xperf -on BASE
Per abilitare la traccia dell'heap in un processo esistente, sostituire l'ID processo effettivo per XXX nel comando seguente:
xperf -start HeapSession -heap -Pid XXX -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc
Preparare le tracce per l'analisi nello stesso modo usato per l'acquisizione dei dati all'avvio di un processo:
xperf -stop -stop HeapSession -d heapTrace.etl