Debuggen der langsamen Übertragungsrate vom Server

9

Ich versuche dies so einfach wie möglich zu erklären, aber dokumentiert. Dies gilt nicht ausschließlich für diesen Server oder meinen aktuellen ISP . Ich habe im Laufe der Jahre genau das gleiche Problem gesehen, als ich mit verschiedenen ISPs zusammen war und meine Server bei verschiedenen Anbietern hatte (GoDaddy in den USA, iWeb und GloboTech in Kanada). Das einzige, was bisher üblich war, ist das Windows Server-Betriebssystem (2003 und 2008 r2). Aber schauen wir uns jetzt nur meinen aktuellen Server und meinen aktuellen ISP an.

Das Problem :

Ich erhalte sehr langsame Übertragungsraten zwischen meiner lokalen Workstation und meinem dedizierten Remote-Server. Mein Server befindet sich an einem 100-Mbit / s-Port und meine lokale Workstation an einer symmetrischen 50-Mbit / s-Verbindung über Glasfaser.

Symptome :

Sowohl der Server als auch die Workstation erzielen hervorragende Ergebnisse (sehr nahe an ihrer Verbindungsgeschwindigkeit), wenn Tests auf speedtest.net mit verschiedenen Servern und Standorten in den USA und Mexiko durchgeführt werden. Wenn ich große Dateien von beispielsweise Dropbox auf meinen Server oder meine Workstation herunterlade, erhalte ich Übertragungsraten von 10 MBit / s bzw. 5 MBit / s über eine einzelne Verbindung, was für jede Verbindungsgeschwindigkeit von 100 Mbit / s und 50 Mbit / s korrekt ist jeweils.

Wenn ich jedoch eine Datei von meinem Server (über HTTP oder FTP) auf meine Workstation übertrage, komme ich nicht einmal an die Geschwindigkeit von 50 Mbit / s heran, die ich erreichen sollte (5 MBit / s Übertragungsrate), sondern erhalte stattdessen etwas, das 3 Mbit / s entspricht (300 KBit / s Übertragungsrate).

Ich versuche zu verstehen, warum ich eine so langsame Übertragungsrate bekomme. Ich bin mir nicht sicher, wie ich es debuggen soll. Immer wenn ich ein Ticket für das Problem mit den Hosting-Anbietern erhebe, fragen sie mich nach Tracert-Ausgaben und geben schließlich einem Server in der Mitte die Schuld. Aber das scheint nicht richtig zu sein, wenn wir berücksichtigen, was ich zuerst gesagt habe : Ich habe genau diese Geschwindigkeit / dieses Problem gesehen, als ich meine Server mit GoDaddy, iWeb und GloboTech hatte und ich selbst mit verschiedenen ISPs zusammen war verschiedene Arten von Internetdiensten . Es sieht wirklich wie eine feste Einstellung irgendwo im Serverbereich aus.

Tests, die ich durchgeführt habe :

GESCHWINDIGKEITSTEST

Dies sind Geschwindigkeitstests von speedtest.net, die auf meinem dedizierten Server für verschiedene Remote-Server ausgeführt wurden, einschließlich eines Servers im Rechenzentrum meines ISP in Mexiko-Stadt:

Kanada : 94,64 Mbit / s zum Herunterladen und 94,87 zum Hochladen http://www.speedtest.net/my-result/3470801975

San Jose, CA : 93,58 Mbit / s zum Herunterladen und 95,48 Mbit / s zum Hochladen http://www.speedtest.net/my-result/3470805341

Mexiko-Stadt (Server im Datencanter meines eigenen ISP) : 92,99 Mbit / s zum Herunterladen und 95,39 Mbit / s zum Hochladen http://www.speedtest.net/my-result/3470810269

Wenn ich diese Tests von meiner lokalen Workstation aus auf denselben Servern ausführe, erhalte ich auch Geschwindigkeiten nahe meiner 50-Mbit / s-Verbindung.

TRACERT

Dies ist eine kürzlich von meiner Workstation auf meinem dedizierten Server ausgeführte Tracert-Ausgabe:

 1    <1 ms    <1 ms    <1 ms  192.168.7.254
 2     2 ms     1 ms     1 ms  10.69.32.1
 3     *        3 ms     2 ms  10.5.50.174
 4     3 ms     2 ms     2 ms  10.5.50.173
 5     *        5 ms     3 ms  fixed-203-69-2.iusacell.net [189.203.69.2]
 6    32 ms    32 ms    32 ms  8-1-33.ear1.Dallas1.Level3.net [4.71.220.89]
 7    33 ms    33 ms    33 ms  ae-3-80.edge5.Dallas3.Level3.net [4.69.145.145]
 8    33 ms    33 ms    33 ms  ae13.dal33.ip4.tinet.net [77.67.71.221]
 9    76 ms    76 ms   157 ms  xe-1-0-0.mtl10.ip4.tinet.net [89.149.185.41]
10    72 ms    72 ms    72 ms  te2-2.cr2.mtl3.gtcomm.net [67.215.0.160]
11    72 ms    72 ms    72 ms  ae2.csr2.mtl3.gtcomm.net [67.215.0.134]
12    72 ms    72 ms    73 ms  te3-4.dist1.mtl8.gtcomm.net [67.215.0.83]
13    72 ms    72 ms    72 ms  ns1.marveldns.com [173.209.57.82]

IPERF

Dies ist ein iperf-Test, der mit meinem dedizierten Server als Server und meiner Workstation als Client ausgeführt wird:

------------------------------------------------------------
Client connecting to ns1.marveldns.com, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.7.2 port 60339 connected with 173.209.57.82 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.3 sec  5.62 MBytes  4.59 Mbits/sec

PATHPING

Dies ist die Ausgabe eines Pathping-Empfehlens, das von meiner Workstation auf meinem dedizierten Server ausgeführt wird:

Tracing route to ns1.marveldns.com [173.209.57.82]
over a maximum of 30 hops:
  0  ws1 [192.168.7.2]
  1  192.168.7.254
  2  10.69.32.1
  3     *     10.5.50.174
  4  10.5.50.173
  5  fixed-203-69-2.iusacell.net [189.203.69.2]
  6  8-1-33.ear1.Dallas1.Level3.net [4.71.220.89]
  7  ae-3-80.edge5.Dallas3.Level3.net [4.69.145.145]
  8  ae13.dal33.ip4.tinet.net [77.67.71.221]
  9  xe-1-0-0.mtl10.ip4.tinet.net [89.149.185.41]
 10  te2-2.cr2.mtl3.gtcomm.net [67.215.0.160]
 11  ae2.csr2.mtl3.gtcomm.net [67.215.0.134]
 12  te3-4.dist1.mtl8.gtcomm.net [67.215.0.83]
 13  ns1.marveldns.com [173.209.57.82]

Computing statistics for 325 seconds...
            Source to Here   This Node/Link
Hop    RTT  Lost/Sent = Pct  Lost/Sent = Pct  Address
  0                                           ws1 [192.168.7.2]
                                0/ 100 =  0%   |
  1    0ms     0/ 100 =  0%     0/ 100 =  0%  192.168.7.254
                                0/ 100 =  0%   |
  2    1ms     0/ 100 =  0%     0/ 100 =  0%  10.69.32.1
                                0/ 100 =  0%   |
  3    3ms     0/ 100 =  0%     0/ 100 =  0%  10.5.50.174
                                0/ 100 =  0%   |
  4    2ms     0/ 100 =  0%     0/ 100 =  0%  10.5.50.173
                                0/ 100 =  0%   |
  5    4ms    20/ 100 = 20%    20/ 100 = 20%  fixed-203-69-2.iusacell.net [189.203.69.2]
                                0/ 100 =  0%   |
  6   34ms     0/ 100 =  0%     0/ 100 =  0%  8-1-33.ear1.Dallas1.Level3.net [4.71.220.89]
                                0/ 100 =  0%   |
  7   34ms     0/ 100 =  0%     0/ 100 =  0%  ae-3-80.edge5.Dallas3.Level3.net [4.69.145.145]
                                0/ 100 =  0%   |
  8   33ms     0/ 100 =  0%     0/ 100 =  0%  ae13.dal33.ip4.tinet.net [77.67.71.221]
                                0/ 100 =  0%   |
  9   79ms     0/ 100 =  0%     0/ 100 =  0%  xe-1-0-0.mtl10.ip4.tinet.net [89.149.185.41]
                                2/ 100 =  2%   |
 10   73ms    14/ 100 = 14%    12/ 100 = 12%  te2-2.cr2.mtl3.gtcomm.net [67.215.0.160]
                                0/ 100 =  0%   |
 11   72ms     2/ 100 =  2%     0/ 100 =  0%  ae2.csr2.mtl3.gtcomm.net [67.215.0.134]
                                2/ 100 =  2%   |
 12   72ms    18/ 100 = 18%    14/ 100 = 14%  te3-4.dist1.mtl8.gtcomm.net [67.215.0.83]
                                0/ 100 =  0%   |
 13   72ms     4/ 100 =  4%     0/ 100 =  0%  ns1.marveldns.com [173.209.57.82]

Trace complete.

Dinge, die Sie selbst ausprobieren können

Wenn Sie es versuchen möchten, sind dies einige Dinge, die ich zu Testzwecken auf dem Server eingerichtet habe:

Große Datei auf dem HTTP-Server

Ich habe eine 5-GB-Datei auf meinem Server abgelegt, die über HTTP heruntergeladen werden kann. Sie finden es hier: http://www.marveldns.com/transfer_test/

Speedtest MINI App

Ich habe auf meinem Server einen "Speedtest Mini" -Test eingerichtet. Sie können es besuchen und sehen, welche Geschwindigkeit Sie sowohl zum Herunterladen als auch zum Hochladen auf meinem Server und für sich selbst erhalten. Sie finden es hier: http://www.marveldns.com/speedtest/

Endlich :

Wie ich bereits sagte, versuche ich, Hilfe zu bekommen, um das Ganze zu verstehen. Ich bin kein Experte für TCP / IP oder Top-End-Netzwerke. Ich habe ehrlich gesagt nicht einmal klar, wie ich die Ergebnisse von Tracert, Iperf oder Pingpath verwenden soll, um das Problem lösen zu können, aber ich schließe sie ein, weil ich immer danach gefragt werde, wenn ich über dieses Problem spreche.

Wenn meiner Frage etwas fehlt, um besser zu sein, stimmen Sie es bitte nicht einfach ab und lassen Sie mich wissen, was daran falsch ist oder was ich noch hinzufügen kann, um Hilfe zu erhalten. Danke.

Francisco Zarabozo
quelle
Nur weil ich neugierig bin, welche Geschwindigkeit haben Sie, wenn Sie Ihre Datei auf localhost auf Ihrem dedizierten Server abrufen?
Brice
Hallo Brice. Ich erhalte ungefähr 50 MB / s (Bytes, keine Bits), was ziemlich genau der Geschwindigkeit entspricht, die ich erhalte, wenn ich die Datei manuell in denselben Ordner auf derselben Festplatte direkt im Windows Explorer kopiere (daher ist sie durch die Geschwindigkeit von begrenzt) die Festplatte, während sie von sich selbst liest und in sich selbst schreibt).
Francisco Zarabozo
1
Laut tracert befindet sich Ihre Workstation in einem ziemlich großen Netzwerk. Haben Sie versucht, den lokalen Netzwerkadministrator zu fragen, ob es Fragen gibt, die die Verbindung verlangsamen würden?
Wenn Sie mehrere Übertragungen gleichzeitig starten, summiert sich die kombinierte Geschwindigkeit auf nahezu die erwarteten 50 Mbit / s? dh. Ist es insgesamt langsam oder langsam pro Verbindung?
Grant
@Grant: Bei mehreren Verbindungen werden Anzeigen mit bis zu 50 Mbit / s geschaltet. Das Limit tritt pro Verbindung auf.
Francisco Zarabozo

Antworten:

9

Der Engpass, den ich beim Zugriff auf diese URL sehe, ist eindeutig auf die Fenstergröße zurückzuführen.

Wenn ich versuche, von Ihrem Server herunterzuladen, erhalte ich 555 KB / s. Ich habe eine Hin- und Rückfahrt von 108 ms. Wenn ich rechne, erhalte ich die folgende Fenstergröße: 555 KB / s * 108 ms = 59,94 KB.

Solange ich es von einem Host in einem Rechenzentrum aus mache, erhalte ich einen sehr konsistenten Durchsatz und Roundtrip. Wenn ich zwei Downloads gleichzeitig starte, erhalten Sie jeweils 555 KB / s. Das sind genau die Symptome, die Sie sehen werden, wenn der Engpass die Fenstergröße ist.

Ohne Fensterskalierung darf das Fenster nicht größer als 64 KB sein. Ich sehe jedoch, dass die Fensterskalierung ausgehandelt wird, sodass ein höherer Durchsatz möglich sein sollte. Dies lässt zwei Hypothesen zu untersuchen:

  • Etwas verändert die Fensterskalierungsoption auf dem Pfad vom Client zum Server, sodass der Server denkt, dass das Fenster um den Faktor 1 skaliert ist.
  • Der Server ist möglicherweise so konfiguriert, dass bei jeder Verbindung niemals mehr als 60 KB Sendefenster verwendet werden.

Der erste ist leicht zu überprüfen, ob Sie eine Paketerfassung auf dem Server durchführen können. Schauen Sie sich einfach die Skalierungsoption für eingehende SYN-Pakete an, um herauszufinden, ob der Server einen höheren Skalierungsfaktor als eins empfängt. Ich kann die Verwendung von Wireshark zur Analyse des Datenverkehrs empfehlen.

Das Überprüfen der zweiten Hypothese erfordert einige Kenntnisse des von Ihnen verwendeten Betriebssystems. Sie haben zufällig ein mir unbekanntes Betriebssystem gewählt, bei dem ich nicht helfen kann. Ich kann also nur mit Fachwissen im Networking helfen.

Kasperd
quelle
Ich bin nicht 100% sicher, aber wird die Fenstergröße nicht durch die Socket-Sende- und Empfangspuffergröße beeinflusst (Socket-Optionen SO_RVSBUF und SO_SNDBUF)? Ich habe ähnliche Vorfälle gesehen, bei denen der Puffer zu klein war (z. B. 1 KB) und der Durchsatz im Vergleich zu 4 KB oder 8 KB sehr eingeschränkt war.
Cameron Kerr
@CameronKerr Ihr Kommentar hat mich dazu veranlasst, mir die Kommunikation noch einmal anzusehen. Diesmal habe ich von meinem Laptop aus getestet (der über WLAN verfügt und einen geringeren Durchsatz erzielt). Was ich beobachtet habe war, dass ich 138KB / s mit einer 105ms Hin- und Rückfahrt bekomme. Dies bedeutet eine effektive Fenstergröße von 14,5 KB. Das von meinem Laptop angekündigte Empfangsfenster wuchs auf 679 << 7 (ca. 85 KB), bevor sich der Durchsatz stabilisierte. Dies sollte die Möglichkeit ausschließen, dass der Skalierungsfaktor während der Übertragung einfach auf Null gesetzt wurde, und die Möglichkeit ausschließen, dass der Durchsatz durch den Empfangspuffer auf meiner Seite eingeschränkt wurde.
Kasperd
Ein relevanter Artikel für Windows Server 2008 r2 finden Sie hier: andydavies.me/blog/2011/11/21/…
Francisco Zarabozo