Отладка медленной скорости передачи с сервера

9

Я пытаюсь объяснить это как можно проще, но задокументировано. Это не только для этого сервера или моего текущего интернет-провайдера . В течение многих лет я сталкивался с одной и той же проблемой, когда работал с разными Интернет-провайдерами и имел свои серверы у разных провайдеров (GoDaddy в США, iWeb и GloboTech в Канаде). Единственное, что было распространено - это ОС Windows Server (2003 и 2008 r2). Но давайте теперь посмотрим на мой текущий сервер и только моего текущего интернет-провайдера.

Проблема :

Я получаю очень медленные скорости передачи между моей локальной рабочей станцией и моим удаленным выделенным сервером. Мой сервер подключен к порту 100 Мбит / с, а моя локальная рабочая станция - к симметричному соединению 50 Мбит / с по оптоволоконному кабелю.

Симптомы :

Как сервер, так и рабочая станция получают отличные результаты (очень близкие к скорости соединения) при выполнении тестов на speedtest.net на разных серверах и в разных местах в США и Мексике. Если я загружаю большие файлы, скажем, из Dropbox, либо на свой сервер, либо на свою рабочую станцию, я получаю скорости передачи 10 Мбит / с и 5 Мбит / с соответственно для одного подключения, что соответствует каждой скорости соединения 100 Мбит / с и 50 Мбит / с repectively.

Тем не менее, если я перенесу файл со своего сервера (через HTTP или FTP) на свою рабочую станцию, я даже близко не достигну скорости 50 Мбит / с, которую я должен получить (скорость передачи 5 Мбит / с), но вместо этого получаю что-то, эквивалентное 3 Мбит / с (Скорость передачи 300 кбит / с).

Я пытаюсь понять, почему у меня такая низкая скорость передачи. Я не уверен, как отладить это. Всякий раз, когда я поднимаю заявку на проблему с хостинг-провайдерами, они спрашивают меня о выводах tracert и, наконец, просто обвиняют в этом какой-то сервер в середине. Но это не кажется правильным, если принять во внимание то, что я сказал вначале: я видел эту точную скорость / проблему, когда у меня были серверы с GoDaddy, iWeb и GloboTech, и когда я сам был с разными провайдерами на очень различные виды интернет-услуг . Это действительно похоже на фиксированную настройку где-то в области сервера.

Тесты, которые я сделал :

SpeedTest

Это тесты скорости от speedtest.net, которые были выполнены на моем выделенном сервере на разных удаленных серверах, включая сервер в центре обработки данных моего провайдера в Мехико:

Канада : 94,64 Мбит / с для загрузки и 94,87 для загрузки http://www.speedtest.net/my-result/3470801975

Сан-Хосе, Калифорния : 93,58 Мбит / с для загрузки и 95,48 Мбит / с для загрузки http://www.speedtest.net/my-result/3470805341

Мехико (сервер в центре данных моего провайдера) : 92,99 Мбит / с для загрузки и 95,39 Мбит / с для загрузки http://www.speedtest.net/my-result/3470810269

Если я запускаю эти тесты на тех же серверах с моей локальной рабочей станции, я получаю скорость, близкую к моему соединению 50 Мбит / с.

TRACERT

Это недавний вывод tracert, выполненный с моей рабочей станции на мой выделенный сервер:

 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

Это тест iperf, выполненный с использованием моего выделенного сервера в качестве сервера и моей рабочей станции в качестве клиента:

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

Это вывод команды pathping, выполняемой с моей рабочей станции на мой выделенный сервер:

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.

Вещи, которые вы можете попробовать сами

Если вы хотите попробовать, вот несколько вещей, которые я настроил на сервере для тестирования:

Большой файл на HTTP-сервере

Я разместил на своем сервере файл размером 5 ГБ, который можно загрузить через HTTP. Вы можете найти его здесь: http://www.marveldns.com/transfer_test/

Speedtest MINI приложение

Я установил тест «speedtest mini» на своем сервере. Вы можете посетить его и посмотреть, какую скорость, по его словам, вы получаете как для загрузки, так и для загрузки на моем сервере и на себя. Вы можете найти его здесь: http://www.marveldns.com/speedtest/

Наконец :

Как я уже говорил, я пытаюсь помочь понять все это. Я не эксперт по TCP / IP или топовым сетям. Я, честно говоря, даже не знаю, как использовать результаты tracert, iperf или pingpath, чтобы решить проблему, но я включаю их, потому что меня всегда просят об этом, когда я говорю об этой проблеме.

Если в моем вопросе не хватает чего-то лучшего, пожалуйста, не понижайте его и дайте мне знать, что с ним не так или что я могу добавить к нему, чтобы получить некоторую помощь. Спасибо.

Франциско Сарабосо
источник
только потому, что мне любопытно, какая у вас скорость, когда вы размещаете свой файл на локальном хосте на своем выделенном сервере?
Брайс
Привет, Брайс. Я получаю что-то около 50 МБ / с (байты, а не биты), что примерно равно скорости, которую я получаю, если вручную скопировать файл в ту же папку на том же диске непосредственно в Windows Explorer (поэтому он ограничен скоростью диск, пока он читает и записывает сам).
Франциско Сарабосо,
1
Согласно tracert, ваша рабочая станция находится в довольно большой сети. Вы пытались спросить у локального сетевого администратора, существует ли какой-нибудь Qos, который бы замедлял соединения?
Если вы начнете несколько передач одновременно, будет ли комбинированная скорость приближаться к ожидаемым 50 Мбит / с? то есть. Это медленный по всем, или медленный на соединение?
Грант
@Grant: с несколькими подключениями он рекламирует до 50 Мбит / с. Ограничение происходит на соединение.
Франциско Сарабосо

Ответы:

9

Узкое место, которое я вижу при доступе к этому URL, явно связано с размером окна.

Когда я пытаюсь загрузить с вашего сервера, я получаю 555 КБ / с. У меня время туда-обратно 108мс. Делая математику, я получаю следующий размер окна: 555 КБ / с * 108 мс = 59,94 КБ.

Пока я делаю это с хоста в центре обработки данных, я получаю очень стабильную пропускную способность и туда и обратно. Кроме того, если я начну две загрузки параллельно, то получу 555 КБ / с. Это именно те симптомы, которые вы увидите, когда узким местом станет размер окна.

Без масштабирования окна оно не может быть больше 64 КБ. Но я вижу, что масштабирование окон согласуется, поэтому должна быть возможна более высокая пропускная способность. Это оставляет две гипотезы для расследования:

  • Что-то искажает параметр масштабирования окна на пути от клиента к серверу, заставляя сервер думать, что окно масштабируется с коэффициентом 1.
  • Сервер может быть настроен так, чтобы никогда не использовать окно отправки более 60 КБ для каждого соединения.

Первый легко проверить, если вы можете выполнить захват пакета на сервере. Просто посмотрите на параметр масштабирования на входящих пакетах SYN, чтобы узнать, получен ли на сервер коэффициент масштабирования выше единицы. Я могу рекомендовать использовать Wireshark для анализа трафика.

Проверка второй гипотезы требует определенных знаний об используемой операционной системе. Вы случайно выбрали операционную систему, которая мне неизвестна, поэтому я не могу помочь. Так что я могу помочь только с опытом в области сетей.

kasperd
источник
Я не уверен на 100%, но разве размер окна не зависит от размера буфера отправки и получения сокета (параметры сокета SO_RVSBUF и SO_SNDBUF)? Я видел подобные случаи, когда буфер был слишком мал (например, 1 КБ), а пропускная способность была очень ограниченной по сравнению с 4 КБ или 8 КБ).
Кэмерон Керр
@CameronKerr Ваш комментарий побудил меня еще раз взглянуть на сообщение. На этот раз я проверил на своем ноутбуке (который подключен к WiFi и имеет меньшую пропускную способность). То, что я наблюдал, было то, что я получаю 138 КБ / с с 105 мс туда-обратно. Это означает эффективный размер окна 14,5 КБ. Окно приема, объявленное моим ноутбуком, до стабилизации пропускной способности выросло до 679 << 7 (около 85 КБ). Это должно исключить возможность того, что коэффициент масштабирования просто обнулялся при передаче, и исключить возможность того, что пропускная способность была ограничена приемным буфером на моем конце.
Касперд
Соответствующую статью для Windows Server 2008 r2 можно найти здесь: andydavies.me/blog/2011/11/21/…
Francisco Zarabozo