web-dev-qa-db-ja.com

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 )は次のように述べています。

上位層プロトコルへの配信を妨げるエラーが検出されなかった場合でも、破棄するように選択されたインバウンドパケットの数を示します。このようなパケットを破棄する理由の1つとして、バッファスペースを解放することが考えられます。

...それはまだ時間枠を述べていません。

他の誰かが2015年にTechNetでこれを尋ねましたが、答えが得られませんでした( https://social.technet.Microsoft.com/Forums/ie/en-US/f2093760-5462-45b5-a3e1-128d0b119509/パケット-受信-破棄?フォーラム= winservergen )。

助けてください。ありがとう。

1
Nick Simonian

私もここで説明を探していました、そしてこれは私が見つけたものです。

  1. このカウンターのポーリング期間はありません。破棄が発生すると増分されます。
  2. 再起動時にリセットされます。私はこれを述べている文書を見つけませんでしたが、実際にはこれに対する例外は見ていません。
  3. どの時間間隔でもリセットされません。
  4. カウンターがDWORDの最大値に達すると2ビット符号なし整数 )ラップアラウンドする必要がありますが、.NETドキュメントの一部では、値が切り捨てられると記載されています。 32ビット整数の最大値より大きい。したがって、この動作は、カウンターへのアクセス方法によって異なります。

カウンターが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呼び出しによって返されます。

3
LArntz