Eventos de coleta de lixo do runtime do .NET

Os eventos descritos nesse artigo coletam informações relativas à coleta de lixo. Eles ajudam no diagnóstico e na depuração, incluindo a determinação de quantas vezes a coleta de lixo foi realizada, quanta memória ela liberou etc. Para saber como usar esses eventos para fins de diagnóstico, veja Registro em log e rastreamento de aplicativos .NET

Evento GCStart_V2

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCStart_V1 1 Uma coleta de lixo foi iniciada.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
Count win:UInt32 Coleta de lixo número n.
Depth win:UInt32 A geração que está sendo coletada.
Reason win:UInt32 Motivo do gatilho da coleta de lixo:

0x0 ─ Alocação de heap de objeto pequeno.

0x1 ─ Induzido.

0x2 ─ Memória insuficiente.

0x3 ─ Vazio.

0x4 ─ Alocação de heap de objeto grande.

0x5 ─ Sem espaço (para heap de objeto pequeno).

0x6 ─ Sem espaço (para heap de objeto grande).

0x7 ─ Induzido, mas não forçado como bloqueio.
Type win:UInt32 0x0 ─ O bloqueio de coleta de lixo ocorreu fora da coleta de lixo em segundo plano.

0x1 ─ Coleta de lixo em segundo plano.

0x2 ─ O bloqueio de coleta de lixo ocorreu durante a coleta de lixo em segundo plano.
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.

Evento GCEnd_V1

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCEnd_V1 2 A coleta de lixo foi encerrada.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
Count win:UInt32 Coleta de lixo número n.
Depth win:UInt32 A geração que foi coletada.
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.

Evento GCHeapStats_V2

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Descrição
GCHeapStats_V2 4 Mostra as estatísticas de heap no final de cada coleta de lixo.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
GenerationSize0 win:UInt64 O tamanho, em bytes, da memória de geração 0.
TotalPromotedSize0 win:UInt64 O número de bytes que são promovidos da geração 0 para a geração 1.
GenerationSize1 win:UInt64 O tamanho, em bytes, da memória de geração 1.
TotalPromotedSize1 win:UInt64 O número de bytes que são promovidos da geração 1 para a geração 2.
GenerationSize2 win:UInt64 O tamanho, em bytes, da memória de geração 2.
TotalPromotedSize2 win:UInt64 O número de bytes que sobreviveram na geração 2 após a última coleta.
GenerationSize3 win:UInt64 O tamanho, em bytes, do heap de objetos grandes.
TotalPromotedSize3 win:UInt64 O número de bytes que sobreviveram no heap de objetos grandes após a última coleta.
FinalizationPromotedSize win:UInt64 O tamanho total, em bytes, dos objetos que estão prontos para finalização.
FinalizationPromotedCount win:UInt64 O número de objetos que estão prontos para finalização.
PinnedObjectCount win:UInt32 O número de objetos (imóveis) fixados.
SinkBlockCount win:UInt32 O número de blocos de sincronização em uso.
GCHandleCount win:UInt32 O número de manipuladores de coleta de lixo em uso.
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.
GenerationSize4 win:UInt64 O tamanho, em bytes, do heap do objeto fixado.
TotalPromotedSize4 win:UInt64 O número de bytes que sobreviveram no heap do objeto fixado após a última coleta.

Evento GCCreateSegment_V1

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCCreateSegment_V1 5 Um novo segmento de coleta de lixo foi criado. Além disso, quando o rastreamento é habilitado em um processo que já está em execução, esse evento é acionado para cada segmento existente.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
Address win:UInt64 O endereço do segmento.
Size win:UInt64 O tamanho do segmento.
Type win:UInt32 0x0 – Heap de objetos pequenos.

0x1 – Heap de objetos grandes.

0x2 – Heap somente leitura.
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.

Observe que o tamanho de segmentos alocados pelo coletor de lixo é específico à implementação e está sujeito a alterações a qualquer momento, incluindo em atualizações periódicas. Seu aplicativo nunca deve fazer suposições sobre o tamanho de um segmento em particular nem depender dele, tampouco deve tentar configurar a quantidade de memória disponível para alocações de segmento.

Evento GCFreeSegment_V1

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCFreeSegment_V1 6 Um segmento de coleta de lixo foi liberado.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
Address win:UInt64 O endereço do segmento.
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.

Evento GCRestartEEBegin_V1

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCRestartEEBegin_V1 7 A continuidade da suspensão do Common Language Runtime foi iniciada.

Esse evento não tem nenhum dado de evento.

Evento GCRestartEEEnd_V1

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCRestartEEEnd_V1 3 A continuidade da suspensão do Common Language Runtime foi encerrada.

Esse evento não tem nenhum dado de evento.

Evento GCSuspendEEEnd_V1

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCSuspendEEEnd_V1 8 Fim da suspensão do mecanismo de execução da coleta de lixo.

Esse evento não tem nenhum dado de evento.

Evento GCSuspendEEBegin_V1

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCSuspendEEBegin_V1 9 Início da suspensão do mecanismo de execução da coleta de lixo.
Nome do campo Tipo de dados Descrição
Count win:UInt32 Coleta de lixo número n.
Reason win:UInt32 Motivo da suspensão do EE.

0x0: suspender para outros

0x1: suspender para a GC.

0x2: suspender para encerramento do AppDomain.

0x3: suspender para lançamento de código.

0x4: suspender para desligamento.

0x5: suspender para o depurador.

0x6: suspender para a preparação para a GC.

0x7: suspender para a varredura do depurador

Evento GCAllocationTick_V3

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Detalhado (5)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCAllocationTick_V3 10 A cada vez, aproximadamente 100 KB são alocados.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
AllocationAmount win:UInt32 O tamanho de alocação, em bytes. Esse valor é preciso para alocações menores do que o tamanho de um ULONG (4.294.967.295 bytes). Se a alocação for maior, esse campo conterá um valor truncado. Use AllocationAmount64 para alocações muito grandes.
AllocationKind win:UInt32 0x0 ─ Alocação de objeto pequeno (a alocação está no heap de objeto pequeno).

0x1 ─ Alocação de objeto grande (a alocação está no heap de objeto grande).
AllocationAmount64 win:UInt64 O tamanho de alocação, em bytes. Esse valor é preciso para alocações muito grandes.
TypeId win:Pointer O endereço da MethodTable. Quando há vários tipos de objetos que foram alocados durante esse evento, esse é o endereço da MethodTable que corresponde ao último objeto alocado (o objeto que fez com que o limite de 100 KB fosse excedido).
TypeName win:UnicodeString O nome do tipo que foi alocado. Quando há vários tipos de objetos que foram alocados durante esse evento, esse é o tipo do último objeto alocado (o objeto que fez com que o limite de 100 KB fosse excedido).
HeapIndex win:UInt32 O heap em que o objeto foi alocado. Esse valor é 0 (zero) durante a execução da coleta de lixo da estação de trabalho.
Address win:Pointer O endereço do último objeto alocado.
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.

Evento GCCreateConcurrentThread_V1

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)
ThreadingKeyword (0x10000) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCCreateConcurrentThread_V1 11 O thread da coleta de lixo simultânea foi criado.

Esse evento não tem nenhum dado de evento.

Evento GCTerminateConcurrentThread_V1

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)
ThreadingKeyword (0x10000) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCTerminateConcurrentThread_V1 12 O thread da coleta de lixo simultânea foi terminado.

Esse evento não tem nenhum dado de evento.

Evento GCFinalizersBegin_V1

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCFinalizersBegin_V1 14 O início da execução dos finalizadores.

Esse evento não tem nenhum dado de evento.

Evento GCFinalizersEnd_V1

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCFinalizersEnd_V1 13 O fim da execução dos finalizadores.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
Count win:UInt32 O número de finalizadores que foram executados.
ClrInstanceID win:UInt16 ID exclusiva da instância do CLR ou do CoreCLR.

Evento SetGCHandle

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCHandleKeyword (0x2) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
SetGCHandle 30 Um identificador de GC foi definido.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
HandleID win:Pointer O endereço do identificador alocado.
ObjectID win:Pointer O endereço do objeto cujo identificador foi criado.
Kind win:UInt32 O tipo de identificador de GC que foi definido.

0x0: WeakShort

0x1: WeakLong

0x2: Strong

0x3: Pinned

0x4: Variable

0x5: RefCounted

0x6: Dependent

0x7: AsyncPinned

0x8: SizedRef
Generation win:UInt32 A geração do objeto cujo identificador foi criado.
AppDomainID win:UInt64 A ID do AppDomain.
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.

Evento DestroyGCHandle

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCHandleKeyword (0x2) Informativo (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
DestroyGCHandle 31 Um identificador de GC foi destruído.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
HandleID win:Pointer O endereço do identificador destruído.
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.

Evento PinObjectAtGCTime

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Detalhado (5)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
PinObjectAtGCTime 33 Um objeto foi fixado durante uma GC.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
HandleID win:Pointer O endereço do identificador.
ObjectID win:Pointer O endereço do objeto fixado.
ObjectSize win:UInt64 O tamanho do objeto fixado.
TypeName win:UnicodeString O nome do tipo do objeto fixado.
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.

Evento GCTriggered

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Detalhado (5)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCTriggered 35 Uma GC foi disparada.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
Reason win:UInt32 O motivo pelo qual uma GC foi disparada.

0x0: AllocSmall

0x1: Induced

0x2: LowMemory

0x3: Empty

0x4: AllocLarge

0x5: OutOfSpaceSmallObjectHeap

0x6: OutOfSpaceLargeObjectHeap

0x7:InducedNoForce

0x8: Stress

0x9: InducedLowMemory
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.

Evento IncreaseMemoryPressure

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informação (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
IncreaseMemoryPressure 200 A pressão da memória aumentou.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.

Evento DecreaseMemoryPressure

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informação (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
DecreaseMemoryPressure 201 A pressão da memória foi diminuída.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
BytesFreed win:UInt32 Bytes liberados.
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.

Evento GCMarkWithType

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Informação (4)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCMarkWithType 202 Uma raiz de GC foi marcada durante a fase de marcação de GC.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
HeapNum win:UInt32 O número do heap.
ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.
Type win:UInt32 O tipo de raiz da GC.

0x0: Stack

0x1: Finalizer

0x2: Handle

0x3: Older

0x4: SizedRef

0x5: Overflow

Bytes win:UInt64 O número de bytes marcados.

Evento GCJoin_V2

A seguinte tabela mostra a palavra-chave e o nível:

Palavra-chave para acionar o evento Nível
GCKeyword (0x1) Detalhado (5)

A seguinte tabela mostra as informações do evento:

Evento ID do evento Acionado quando
GCJoin_V2 203 Um thread de GC ingressado.

A seguinte tabela mostra os dados do evento:

Nome do campo Tipo de dados Descrição
Heap win:UInt32 O número de heap
JoinTime win:UInt32 Indica se esse evento é disparado no início ou no final de uma junção (0x0 para o início e 0x1 para o final da junção)
JoinType win:UInt32 Tipo de junção.

0x0: última junção

0x1: junção

0x2: reinicialização

0x3: primeira junção reversa

0x4: junção reversa

ClrInstanceID win:UInt16 ID exclusiva da instância do CoreCLR.