Я написал следующий короткий сценарий 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).
Пожалуйста помоги. Спасибо.
Я также искал здесь разъяснения, и вот что я нашел.
Единственная причина, по которой счетчик останется на 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 для получения статистики интерфейса.