Debug velocità di trasferimento lenta dal server


9

Sto cercando di spiegare questo nel modo più semplice ma documentato possibile. Questo non è esclusivo di questo server o del mio attuale ISP . Ho visto lo stesso identico problema nel corso degli anni, pur essendo con ISP diversi e avendo i miei server con provider diversi (GoDaddy negli Stati Uniti, iWeb e GloboTech in Canada). L'unica cosa che è stata comune è il sistema operativo Windows Server (2003 e 2008 r2). Ma cerchiamo ora solo il mio server attuale e il mio attuale ISP.

Il problema :

Ottengo velocità di trasferimento molto lente tra la mia workstation locale e il mio server remoto dedicato. Il mio server è su una porta a 100 Mbps e la mia workstation locale è su una connessione simetrica a 50 Mbps su fibra ottica.

Sintomi :

Sia il server che la workstation ottengono risultati eccellenti (molto vicini alle loro velocità di connessione) quando si eseguono test su speedtest.net su diversi server e posizioni negli Stati Uniti e in Messico. Se scarico file di grandi dimensioni da, diciamo, Dropbox, sul mio server o sulla mia workstation, ottengo velocità di trasferimento rispettivamente di 10 MBps e 5 MBps su una singola connessione, che è corretta in base a ciascuna velocità di connessione di 100 Mbps e 50 Mbps repectively.

Tuttavia, se trasferisco un file dal mio server (tramite HTTP o FTP) alla mia workstation, non mi avvicino nemmeno alla velocità di 50 Mbps che dovrei ottenere (velocità di trasferimento di 5 MBps) ma ottengo invece qualcosa di equivalente a 3 Mbps (Velocità di trasferimento di 300 KBps).

Sto cercando di capire perché ottengo una velocità di trasferimento così lenta. Non sono sicuro su come eseguire il debug. Ogni volta che sollevo un ticket sul problema con i provider di hosting, mi chiedono output tracert e alla fine lo incolpo su un server nel mezzo. Ma questo non sembra corretto, se prendiamo in considerazione ciò che ho detto all'inizio: ho visto questa velocità / problema esatto mentre avevo i miei server con GoDaddy, iWeb e GloboTech e pur essendo me stesso con diversi ISP su diversi tipi di servizio Internet . Sembra davvero un'impostazione fissa da qualche parte nell'area del server.

Test che ho fatto :

TEST DI VELOCITÀ

Questi sono i test di velocità di speedtest.net che sono stati eseguiti nel mio server dedicato su diversi server remoti tra cui un server nel centro dati del mio ISP a Città del Messico:

Canada : 94,64 Mbps per il download e 94,87 per il caricamento http://www.speedtest.net/my-result/3470801975

San Jose, CA : 93,58 Mbps per il download e 95,48 Mbps per il caricamento http://www.speedtest.net/my-result/3470805341

Città del Messico (server nel mio datacanter del mio ISP) : 92,99 Mbps per il download e 95,39 Mbps per il caricamento http://www.speedtest.net/my-result/3470810269

Se eseguo questi test sugli stessi server dalla mia workstation locale, ottengo anche velocità vicine alla mia connessione a 50 Mbps.

TRACERT

Questo è un recente output tracert eseguito dalla mia workstation al mio server dedicato:

 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

Questo è un test iperf eseguito utilizzando il mio server dedicato come server e la mia workstation come client:

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

Questo è l'output di un encomio di pathping eseguito dalla mia workstation al mio server dedicato:

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.

Cose che puoi provare da solo

Se vuoi provarlo, queste sono alcune cose che ho configurato nel server a scopo di test:

File di grandi dimensioni su server HTTP

Ho inserito un file da 5 GB nel mio server che può essere scaricato tramite HTTP. Puoi trovarlo qui: http://www.marveldns.com/transfer_test/

App Speedtest MINI

Ho installato un test "speedtest mini" sul mio server. Puoi visitarlo e vedere quale velocità dice che stai ottenendo sia per il download che per il caricamento sul mio server e su te stesso. Puoi trovarlo qui: http://www.marveldns.com/speedtest/

Finalmente :

Come ho detto prima, sto cercando di ottenere aiuto per capire tutto. Non sono esperto di TCP / IP o reti di fascia alta. Onestamente non ho nemmeno chiaro come usare i risultati di tracert, iperf o pingpath per essere in grado di risolvere il problema, ma li includo perché mi viene sempre chiesto quando parlo di questo problema.

Se la mia domanda manca di qualcosa per essere migliore, per favore non limitarti a ridimensionarla e fammi sapere cosa c'è che non va o cosa posso aggiungere per ottenere aiuto. Grazie.


solo perché sono curioso, che velocità hai quando wget il tuo file su localhost sul tuo server dedicato?
Brice,

Ciao Brice Ottengo qualcosa di circa 50 MB / s (byte, non bit), che è praticamente la stessa velocità che ottengo se copio manualmente il file nella stessa cartella nello stesso disco direttamente in Esplora risorse (quindi è limitato dalla velocità di il disco mentre legge e scrive da solo).
Francisco Zarabozo,

1
Secondo tracert, la tua workstation è su una rete piuttosto grande. Hai provato a chiedere all'amministratore di rete locale se esistesse una sorta di Qos che rallentasse le connessioni?

Se si avviano più trasferimenti contemporaneamente, la velocità combinata aumenta fino a raggiungere i 50 Mbit / s previsti? vale a dire. È lento su tutto o lento per connessione?
Concedi

@Grant: con connessioni multiple, annunci fino a 50 Mbps. Il limite si verifica per connessione.
Francisco Zarabozo,

Risposte:


9

Il collo di bottiglia che vedo quando accedo a quell'URL è chiaramente dovuto alle dimensioni della finestra.

Quando provo a scaricare dal tuo server ottengo 555 KB / s. Ho un tempo di andata e ritorno di 108ms. Facendo la matematica ottengo le seguenti dimensioni della finestra: 555 KB / s * 108 ms = 59,94 KB.

Finché lo faccio da un host in un datacenter, ottengo un throughput e un roundtrip molto coerenti. Inoltre, se inizio due download in parallelo, ottengo ciascuno 555 KB / s. Questi sono esattamente i sintomi che vedrai quando il collo di bottiglia ha le dimensioni della finestra.

Senza il ridimensionamento della finestra, la finestra non può essere più grande di 64 KB. Ma vedo che il ridimensionamento delle finestre viene negoziato, quindi dovrebbe essere possibile un throughput più elevato. Questo lascia due ipotesi per indagare:

  • Qualcosa sta alterando l'opzione di ridimensionamento della finestra sul percorso dal client al server facendo pensare al server che la finestra sia ridimensionata di un fattore 1.
  • Il server può essere configurato per non utilizzare mai più di 60 KB di finestra di invio su ogni connessione.

Il primo è facile da verificare se è possibile eseguire un'acquisizione di pacchetti sul server. Basta guardare l'opzione di ridimensionamento sui pacchetti SYN in arrivo per scoprire se il server riceve un fattore di ridimensionamento superiore a uno. Posso consigliare di utilizzare Wireshark per analizzare il traffico.

La verifica della seconda ipotesi richiede una certa conoscenza del sistema operativo in uso. Ti è capitato di aver scelto un sistema operativo, che mi è sconosciuto, quindi non posso aiutarti. Quindi posso solo aiutare con esperienza nel networking.


Non sono sicuro al 100%, ma la dimensione della finestra non è influenzata dalle dimensioni del buffer di invio e ricezione del socket (opzioni socket SO_RVSBUF e SO_SNDBUF)? Ho visto incidenti simili in cui il buffer era troppo piccolo (ad es. 1 KB) e il throughput era molto limitato rispetto a 4KB o 8 KB.
Cameron Kerr,

@CameronKerr Il tuo commento mi ha spinto a dare un'altra occhiata alla comunicazione. Questa volta ho provato dal mio laptop (che è su WiFi e ottiene una velocità inferiore). Quello che ho osservato è che ottengo 138 KB / s con un andata e ritorno di 105 ms. Ciò significa che una dimensione effettiva della finestra di 14,5 KB. La finestra di ricezione pubblicizzata dal mio laptop è cresciuta a 679 << 7 (circa 85 KB) prima che il throughput si stabilizzasse. Ciò dovrebbe escludere la possibilità che il fattore di ridimensionamento sia semplicemente azzerato durante il trasporto e dovrebbe escludere la possibilità che il throughput sia stato limitato dal buffer di ricezione da parte mia.
Kasperd,

Un articolo pertinente per Windows Server 2008 r2 è disponibile qui: andydavies.me/blog/2011/11/21/…
Francisco Zarabozo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.