Monitoramento do desempenho do Windows - “Pacotes recebidos descartados” nunca mudam

1

Escrevi o seguinte script do PowerShell para ajudar a diagnosticar alguns problemas de desempenho em um servidor:

$counters = @("\Process(*)\% Processor Time","\Process(*)\Working Set","\Process(*)\IO Read Bytes/sec","\Process(*)\IO Write Bytes/sec","\Process(*)\IO Data Bytes/sec","\Network Interface(*)\Bytes Total/sec","\Network Interface(*)\Packets/sec","\Network Interface(*)\Packets Received Discarded","\Network Interface(*)\Packets Received Errors","\Network Interface(*)\Packets Outbound Discarded","\Network Interface(*)\Packets Outbound Errors")

$timeout = new-timespan -Seconds 10
$sw = [diagnostics.stopwatch]::StartNew()
while ($sw.elapsed -lt $timeout)
{
    get-counter -counter $counters  | select -expand countersamples | select timestamp,path,instancename,cookedvalue | export-csv -append -notypeinformation "c:\misc\counters.txt"
    start-sleep -seconds 2
}
write-host "Finished"

O script funciona muito bem e fornece os valores de que preciso. No entanto, ao olhar para o contador de "Pacotes Recebidos Descartados", ele nunca muda do valor "801".

Qual é o período de pesquisa deste contador? Redefine na reinicialização? Não encontrei nenhuma documentação em qualquer lugar que mostre quando é redefinida para 0.

O link da Microsoft ( link ) declara:

Shows the number of inbound packets that were chosen to be discarded even though no errors had been detected to prevent their being deliverable to a higher-layer protocol. One possible reason for discarding such a packet could be to free up buffer space.

... que ainda não indica o prazo.

Alguém mais perguntou isso no TechNet em 2015 e não recebeu uma resposta ( link ).

Por favor ajude. Obrigado.

    
por Nick Simonian 26.10.2018 / 15:40

1 resposta

3

Eu também tenho procurado por esclarecimentos aqui e é isso que eu encontrei.

  1. Não há período de pesquisa para esse contador. É incrementado conforme os descartes acontecem.
  2. Ele é redefinido na reinicialização. Não encontrei nenhuma documentação que afirme isso, mas não vi exceções a isso na prática.
  3. Não é redefinido em nenhum intervalo de tempo.
  4. Quando o contador atinge o valor máximo de um DWORD ( inteiro sem sinal de 32 bits ) deve ser agrupado, mas alguns da documentação do .NET indica que o valor será truncado se for maior que o valor máximo de um int de 32 bits. Então, esse comportamento varia dependendo de como você acessa o contador.

A única razão pela qual o contador permaneceria em 801 é se não houver mais descartes. As devoluções devem ser muito raras, a menos que haja um problema. Geralmente, os descartes ocorrem durante períodos de atividade de rede muito alta. Eles são mais uma indicação de problemas de buffer do que qualquer outra coisa.

FONTES:

Esta é toda a documentação do .NET. Do mesmo link do MSDN que você postou, verá que esse contador é do tipo PERF_COUNTER_RAWCOUNT .

Pesquisando mais informações sobre PERF_COUNTER_RAWCOUNT , encontrei este comentário no GitHub que afirma que não há referência de tempo para esses tipos.

            //
            //  These counters do not use any time reference
            //
            case NativeMethods.PERF_COUNTER_RAWCOUNT:
            case NativeMethods.PERF_COUNTER_RAWCOUNT_HEX:
            case NativeMethods.PERF_COUNTER_DELTA:
            case NativeMethods.PERF_COUNTER_LARGE_RAWCOUNT:
            case NativeMethods.PERF_COUNTER_LARGE_RAWCOUNT_HEX:
            case NativeMethods.PERF_COUNTER_LARGE_DELTA:
                newPdhValue.FirstValue  = newSample.RawValue;
                newPdhValue.SecondValue = 0;

Esta página também declara não há referência de tempo para esse contador tipo:

    // Indicates the data is a counter  which should not be
    // time averaged on display (such as an error counter on a serial line)
    // Display as is.  No Display Suffix.
    public const int PERF_COUNTER_RAWCOUNT =
            (PERF_SIZE_DWORD | PERF_TYPE_NUMBER | PERF_NUMBER_DECIMAL |
            PERF_DISPLAY_NO_SUFFIX);

E este comentário afirma que qualquer valor maior que será truncado:

    ///     Directly accesses the raw value of this counter.  If counter type is of a 32-bit size, it will truncate
    ///     the value given to 32 bits.  This can be significantly more performant for scenarios where
    ///     the raw value is sufficient.   Note that this only works for custom counters created using
    ///     this component,  non-custom counters will throw an exception if this property is accessed.

E aqui está a definição da estrutura para MibIpStats , que é retornado pela chamada do Win32 para obter as estatísticas da interface.

    
por 21.11.2018 / 16:47