Depuração da taxa de transferência lenta do servidor

8

Estou tentando explicar isso como simples, mas o mais documentado possível. Isto não é exclusivo deste servidor ou do meu atual ISP . Eu vi o mesmo problema exato ao longo dos anos enquanto estava com ISPs diferentes e tendo meus servidores com diferentes provedores (GoDaddy nos EUA, iWeb e GloboTech no Canadá). A única coisa que tem sido comum é o sistema operacional Windows Server (2003 e 2008 r2). Mas vamos procurar agora no meu servidor atual e no meu atual provedor.

O problema :

Eu obtenho taxas de transferência muito lentas entre minha estação de trabalho local e meu servidor dedicado remoto. Meu servidor está em uma porta de 100 Mbps e minha estação de trabalho local está em uma conexão simétrica de 50 Mbps em fibra óptica.

Sintomas :

Tanto o servidor quanto a estação de trabalho obtêm excelentes resultados (muito próximos de suas velocidades de conexão) ao realizar testes no speedtest.net em relação a diferentes servidores e locais nos EUA e no México. Se eu baixar arquivos grandes do, digamos, Dropbox, para meu servidor ou minha estação de trabalho, recebo taxas de transferência de 10 MBps e 5 MBps respectivamente em uma única conexão, que é correta de acordo com cada velocidade de conexão de 100 Mbps e 50 Mbps repectivamente.

Ainda assim, se eu transferir um arquivo do meu servidor (via HTTP ou FTP) para minha estação de trabalho, não chego nem perto da velocidade de 50 Mbps que devo obter (taxa de transferência de 5 MBps), mas recebo algo equivalente a 3 Mbps (taxa de transferência de 300 KBps).

Estou tentando entender por que obtenho uma taxa de transferência mais lenta. Não tenho certeza sobre como depurá-lo. Sempre que eu faço um ticket sobre o problema com os provedores de hospedagem, eles me perguntam por saídas tracert e, finalmente, apenas culpam algum servidor no meio. Mas isso não parece estar correto, se levarmos em consideração o que eu disse no começo: Eu vi essa velocidade / problema exato ao ter meus servidores com GoDaddy, iWeb e GloboTech, e sendo eu mesmo com diferentes ISPs em tipos muito diferentes de serviço de Internet . Realmente parece uma configuração fixa em algum lugar na área do servidor.

Testes que fiz :

SPEEDTEST

Estes são testes de velocidade do speedtest.net que foram executados no meu servidor dedicado contra diferentes servidores remotos incluindo um servidor no datacenter do meu ISP na Cidade do México:

Canadá : 94,64 Mbps para download e 94,87 para upload link

San Jose, CA : 93,58 Mbps para download e 95,48 Mbps para upload link

Cidade do México (servidor no datacanter do meu próprio ISP) : 92,99 Mbps para download e 95,39 Mbps para upload link

Se eu executar esses testes contra os mesmos servidores da minha estação de trabalho local, também obtenho velocidades próximas à minha conexão de 50 Mbps.

TRACERT

Esta é uma saída recente do tracert executada da minha estação de trabalho para o meu servidor dedicado:

 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

Este é um teste iperf executado usando meu servidor dedicado como servidor e minha estação de trabalho como cliente:

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

Esta é a saída de um comando de caminho executado a partir da minha estação de trabalho para o meu servidor dedicado:

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.

Coisas que você pode experimentar por si mesmo

Se você quiser experimentar, estas são algumas das coisas que configurei no servidor para fins de teste:

Arquivo grande no servidor HTTP

Eu coloquei um arquivo de 5 GB no meu servidor que pode ser baixado via HTTP. Você pode encontrá-lo aqui: link

aplicativo do Speedtest MINI

Eu configurei um teste "speedtest mini" no meu servidor. Você pode visitá-lo e ver que velocidade ele diz que você está recebendo para download e upload dentro do meu servidor e você mesmo. Você pode encontrá-lo aqui: link

Finalmente :

Como eu disse antes, estou tentando obter ajuda para entender a coisa toda. Eu não sou especialista em redes TCP / IP ou top-end. Sinceramente, nem tenho claro como usar os resultados do tracert, iperf ou pingpath para resolver o problema, mas os incluo porque sempre me perguntam quando falo sobre esse problema.

Se a minha pergunta não tiver algo para ser melhor, por favor, não desista apenas dela e deixe-me saber o que há de errado com ela ou o que mais posso acrescentar a ela para obter alguma ajuda. Obrigado.

    
por Francisco Zarabozo 30.04.2014 / 03:55

1 resposta

9

O gargalo que vejo ao acessar esse URL é claramente devido ao tamanho da janela.

Quando tento fazer o download do seu servidor, recebo 555KB / s. Eu tenho um tempo de ida e volta de 108ms. Fazendo as contas eu recebo o seguinte tamanho de janela: 555KB / s * 108ms = 59.94KB.

Desde que eu faça isso de um host em um datacenter, obtenho um throughput e uma ida e volta bastante consistentes. Além disso, se eu iniciar dois downloads em paralelo, cada um receberá 555 KB / s. Isso é exatamente os sintomas que você verá quando o afunilamento for o tamanho da janela.

Sem o dimensionamento de janelas, a janela não pode ser maior que 64 KB. Mas eu vejo o escalonamento de janelas ser negociado, então uma taxa de transferência mais alta deveria ser possível. Isso deixa duas hipóteses para investigar:

  • Algo está dividindo a opção de dimensionamento de janela no caminho do cliente para o servidor, fazendo com que o servidor ache que a janela é dimensionada por um fator de 1.
  • O servidor pode ser configurado para nunca usar mais de 60 KB de janela de envio em cada conexão.

O primeiro é fácil de verificar se você pode executar uma captura de pacotes no servidor. Basta olhar para a opção de escala nos pacotes SYN recebidos para descobrir se um fator de escala maior que um é recebido pelo servidor. Posso recomendar o uso do Wireshark para analisar o tráfego.

A verificação da segunda hipótese requer algum conhecimento do sistema operacional que você está usando. Por acaso você escolheu um sistema operacional, que é desconhecido para mim, de modo que não posso ajudar. Então, eu só posso ajudar com experiência em redes.

    
por 12.05.2014 / 11:13