Назад | Перейти на главную страницу

Мониторинг производительности Windows - «Полученные пакеты отброшены» никогда не меняется

Я написал следующий короткий сценарий PowerShell, чтобы помочь диагностировать некоторые проблемы с производительностью на сервере:

$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"

Скрипт отлично работает и дает нужные мне значения. Однако, если посмотреть на счетчик «Полученные пакеты отклонены», он никогда не изменится со значения «801».

Каков период опроса этого счетчика? Сбрасывается при перезагрузке? Я не нашел нигде документации, которая показывает, когда он сбрасывается на 0.

Ссылка от Microsoft (https://msdn.microsoft.com/en-us/library/ms803962.aspx) состояния:

Показывает количество входящих пакетов, которые были выбраны для отбрасывания, даже если не было обнаружено ошибок, чтобы предотвратить их доставку в протокол более высокого уровня. Одной из возможных причин отбрасывания такого пакета может быть освобождение буферного пространства.

... в котором до сих пор не указаны временные рамки.

Кто-то еще спросил об этом на TechNet в 2015 году и не получил ответа (https://social.technet.microsoft.com/Forums/ie/en-US/f2093760-5462-45b5-a3e1-128d0b119509/packets-received-discarded?forum=winservergen).

Пожалуйста помоги. Спасибо.

Я также искал здесь разъяснения, и вот что я нашел.

  1. Для этого счетчика нет периода опроса. Он увеличивается по мере сброса.
  2. Он сбрасывается при перезагрузке. Я не нашел документации, подтверждающей это, но на практике не видел исключений из этого.
  3. Он не сбрасывается ни за какой промежуток времени.
  4. Когда счетчик достигает максимального значения DWORD (32-битное целое число без знака) его следует оборачивать, но в некоторых документах .NET указано, что значение будет усечено, если оно больше максимального значения 32-битного int. Таким образом, это поведение зависит от того, как вы получаете доступ к счетчику.

Единственная причина, по которой счетчик останется на 801, - это если больше нет сбросов. Выбросы должны быть очень редкими, если нет проблем. Сброс обычно происходит в периоды очень высокой сетевой активности. Они скорее указывают на проблемы с буфером, чем на что-либо еще.


ИСТОЧНИКИ:

Это вся документация по .NET. Из того же Ссылка MSDN вы разместили, вы увидите, что этот счетчик имеет тип PERF_COUNTER_RAWCOUNT.

Ищем дополнительную информацию о PERF_COUNTER_RAWCOUNT я нашел этот комментарий на GitHub в котором говорится, что для этих типов нет привязки ко времени.

            //
            //  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;

это на странице также говорится для этого типа счетчика нет привязки по времени:

    // 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);

И в этом комментарии говорится что любое значение больше, чем будет усечено:

    ///     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.

И вот определение структуры для MibIpStats который возвращается вызовом Win32 для получения статистики интерфейса.