1 votes

Surveillance des performances de Windows - "Paquets reçus rejetés" ne change jamais

J'ai écrit le court script PowerShell suivant pour aider à diagnostiquer certains problèmes de performance sur un serveur :

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

Le script fonctionne très bien et donne les valeurs dont j'ai besoin. Cependant, lorsque je regarde le compteur pour "Packets Received Discarded", il ne change jamais de la valeur "801".

Quelle est la période d'interrogation de ce compteur ? Est-il remis à zéro au redémarrage ? Je n'ai pas trouvé de documentation indiquant quand il est remis à zéro.

Le lien de Microsoft ( https://msdn.microsoft.com/en-us/library/ms803962.aspx ) déclare :

Indique le nombre de paquets entrants qui ont été choisis pour être rejetés. même si aucune erreur n'a été détectée afin d'éviter qu'ils ne soient pour éviter qu'ils ne soient livrables à un protocole de couche supérieure. Une raison possible pour l'élimination d'un tel paquet pourrait être de libérer de l'espace dans la mémoire tampon.

... qui ne précise toujours pas le délai.

Quelqu'un d'autre a posé cette question sur TechNet en 2015 et n'a pas obtenu de réponse ( ). https://social.technet.microsoft.com/Forums/ie/en-US/f2093760-5462-45b5-a3e1-128d0b119509/packets-received-discarded?forum=winservergen ).

Veuillez m'aider. Merci.

3voto

Luke Points 46

J'ai également cherché des éclaircissements ici et c'est ce que j'ai trouvé.

  1. Il n'y a pas de période d'interrogation pour ce compteur. Il est incrémenté au fur et à mesure des rejets.
  2. Il se réinitialise au redémarrage. Je n'ai trouvé aucune documentation à ce sujet, mais je n'ai vu aucune exception à cette règle dans la pratique.
  3. Il n'est pas remis à zéro sur un intervalle de temps quelconque.
  4. Lorsque le le compteur atteint la valeur maximale d'un DWORD ( Nombre entier non signé de 32 bits ), il devrait s'enrouler autour, mais une partie de la documentation .NET indique que la valeur sera tronquée si elle est supérieure à la valeur maximale d'un int 32 bits. Ainsi, ce comportement varie en fonction de la façon dont vous accédez au compteur.

La seule raison pour laquelle le compteur resterait à 801 est qu'il n'y a plus de défausse. Les rejets devraient être très rares, sauf en cas de problème. Les rejets se produisent généralement pendant les périodes de très forte activité du réseau. Ils sont plus une indication de problèmes de mémoire tampon qu'autre chose.


SOURCES :

Il s'agit de toute la documentation pour .NET. Du même Lien MSDN que vous avez posté, vous verrez que ce compteur est de type PERF_COUNTER_RAWCOUNT .

Vous cherchez plus d'informations sur PERF_COUNTER_RAWCOUNT J'ai trouvé ce commentaire sur GitHub qui stipule qu'il n'y a pas de référence temporelle pour ces types.

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

Ce site La page indique également il n'y a pas de référence temporelle pour ce type de compteur :

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

Y ce commentaire indique que toute valeur supérieure à sera tronquée :

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

Y voici la définition de la structure pour MibIpStats qui est retourné par l'appel Win32 pour obtenir les statistiques de l'interface.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X