Mir ist klar, dass dies sehr subjektiv ist und von einer Reihe von Variablen abhängt, aber ich frage mich, welche Schritte die meisten Leute durchlaufen, wenn sie einen Paketverlust auf einem bestimmten System diagnostizieren müssen.
Mir ist klar, dass dies sehr subjektiv ist und von einer Reihe von Variablen abhängt, aber ich frage mich, welche Schritte die meisten Leute durchlaufen, wenn sie einen Paketverlust auf einem bestimmten System diagnostizieren müssen.
Antworten:
Ich bin ein Netzwerktechniker, daher beschreibe ich dies aus meiner Sicht.
Für mich beginnt die Diagnose eines Paketverlusts normalerweise mit "Es funktioniert nicht sehr gut". Von dort aus versuche ich normalerweise, das Kit so nah wie möglich an beiden Enden der Kommunikation zu finden (normalerweise eine Workstation in einem Büro und irgendwo einen Server) und so nah wie möglich an das andere Ende zu pingen (idealerweise den "entfernten Endpunkt"). Aber manchmal gibt es Firewalls, über die ich keine Pings senden kann, also muss ich mich mit einer LAN-Schnittstelle auf einem Router begnügen.
Wenn ich einen Verlust sehe, ist dies normalerweise ein Fall von "nicht genügend Bandbreite" oder "Verbindung mit Problemen", also suchen Sie die Route durch das Netzwerk und beginnen Sie in der Mitte, die Ihnen normalerweise das eine oder andere Ende gibt.
Wenn ich keinen Verlust sehe, lauten die nächsten beiden Schritte in der Regel "Weitere Pings senden" oder "Größere Pings senden". Wenn die Sortierung keinen Hinweis auf das Problem gibt, ist es an der Zeit, die QoS-Richtlinien und Schnittstellenstatistiken über den gesamten Pfad zwischen den Endpunkten zu betrachten.
Wenn das nichts bringt, ist es Zeit, Ihre Vermutungen in Frage zu stellen, ob Sie tatsächlich unter Paketverlust leiden. Der einzig sichere Weg, dies herauszufinden, ist das gleichzeitige Erfassen an beiden Enden, entweder durch Verwenden von WireShark (oder eines gleichwertigen Mittels) auf den Hosts oder durch Anschließen von Sniffer-Maschinen (wahrscheinlich mit WireShark oder ähnlichem) über Netzwerk-Taps. Dann kommt der Spaß beim Vergleichen der beiden Paketerfassungen ...
Manchmal ist das, was als "Paketverlust" bezeichnet wird, einfach etwas auf der Serverseite, das merklich langsamer ist (z. B. das Verschieben der Datenbank von "im selben LAN" auf "20 ms entfernt" und das Verwenden von Abfragen, die sehr viel Zeit erfordern) hin und her zwischen dem Front-End und der Datenbank).
Aus der Sicht eines Linux-Systems werde ich zunächst nach Paketverlust auf der Netzwerkschnittstelle mit suchen ethtool -S ethX
.
Meistens wird dies durch Erhöhen des Ringpuffers ethtool -G ethX rx VALUE
behoben.
Manchmal werden Interrupts nicht ausgeglichen, weil dem System der Dienst irqbalance fehlt. Überprüfen Sie daher in chkconfig
(EL) oder update-rc
(Debuntu), ob dieser Dienst ausgeführt wird. Sie können feststellen, ob Interrupts nicht ausgeglichen sind, da /proc/interrupts
nur Core 0 angezeigt wird, der alle IRQ-Kanäle bedient.
Andernfalls müssen Sie möglicherweise eine Erhöhung vornehmen, net.core.netdev_max_backlog
wenn das System mehr als ein paar Gigabit Datenverkehr überträgt, und möglicherweise net.core.netdev_budget
.
Wenn das nicht funktioniert, können Sie den Interrupt zwicken koaleszierende Werte mit ethtool -C
.
Wenn die Netzwerkschnittstelle keine Paketverluste aufweist, überprüfen netstat -s
Sie, ob die Socket-Puffer gelöscht wurden. Diese werden mit Statistiken wie " pruned from receive queue
" und " dropped from out-of-order queue
" gemeldet .
Sie können versuchen, den Standard- und den Maximal-Socket-Puffer für das entsprechende Protokoll zu erhöhen (z. B. net.ipv4.tcp_rmem
für TCP).
Wenn die Anwendung ihre eigene Socket-Puffergröße festlegt, sind möglicherweise Konfigurationsänderungen für die Anwendung erforderlich. Wenn Ihre Anwendung fest codierte Socket-Puffergrößen aufweist, wenden Sie sich an den Hersteller der Anwendung.
Persönlich mag ich das Protokoll-Offloading auf Netzwerkkarten (Prüfsummen, Segmentierungs-Offloading, großes Empfangs-Offloading) nicht, da es mehr Probleme zu verursachen scheint, als es wert ist. Es ethtool -K
kann einen Versuch wert sein, mit diesen Einstellungen zu experimentieren.
Sehen Sie sich die Moduloptionen für Ihre Netzwerkkarte ( modinfo <drivername>
) an, da Sie möglicherweise einige Funktionen ändern müssen. Ich habe beispielsweise festgestellt, dass die Verwendung von Intels Flow Director auf einem System, das einen großen TCP-Stream verarbeitet, wahrscheinlich die Effizienz dieses Streams beeinträchtigt. Deaktivieren Sie daher FDir.
Darüber hinaus werden Sie dieses spezifische System für seine spezifische Arbeitsbelastung von Hand abstimmen, was, wie ich vermute, den Rahmen Ihrer Frage sprengt.
Isolieren und dann eliminieren.
Suchen Sie die kleinste Teilmenge der Pfade mit dem Problem. Testen Sie dazu verschiedene Kombinationen und / oder destillieren Sie Benutzerberichte. Vergessen Sie nicht, die Zeit in die Equasion einzubeziehen. Vielleicht ist es nur ein Paketverlust beim gesamten Datenverkehr zu einem bestimmten Netzwerk, oder vielleicht leiden nur die drahtlosen Clients. Berücksichtigen Sie verschiedene Verkehrstypen (Ratenbegrenzung für Pings). Finden Sie den zuverlässigsten und am einfachsten zu wiederholenden Weg, um es zu testen.
Beseitigen Sie dann mögliche Ursachen. Reduzieren Sie den Datenverkehr auf den Verbindungen (vorübergehend), entfernen Sie Störquellen aus dem Spektrum und trennen Sie bestimmte Clients. Schließlich finden Sie die Ursache des Problems.
Sie können manchmal Verknüpfungen verwenden, indem Sie sich Paket-Dumps ansehen oder Vermutungen anstellen (es ist immer bittorrent). Erklären Sie auch Ihrem Professor, dass serverfault fantastisch ist.
Pings zeigen möglicherweise keinen Paketverlust, es sei denn, Sie senden große Pings! Ich hatte einen Paketverlust in meinem Netzwerk, der unsichtbar war, bis ich die Größe meines Ping-Pakets erhöhte.
Für Windows:
ping -n 30 -l <largevalue> <target>
Denn largevalue
ich habe 40960 (40k Packet) benutzt
Denn target
ich habe die ersten paar IP-Adressen austracert google.com
(das war mein Router & Kabelmodem). Eines der Geräte weiter unten in der Kette hatte einen schrecklichen Paketverlust (> 60%) für große Pakete, aber 0% für kleine. Ich habe es durch einen Neustart behoben, aber es könnte auch ein Kabel oder etwas internes sein, das ausgetauscht werden muss.