5

У меня есть веб-сервер разработки, каталог приложения которого сопоставлен с моим локальным компьютером как диск Z: (например, \\web_server \wwwroot). Для доступа к общей папке требуются учетные данные домена (моя учетная запись домена является совладельцем этой папки).

Я умею хорошо читать и писать файлы, но производительность msysGit низкая.

Веб сервер:

patrick@web_server /c/inetpub/wwwroot (master) $ time git status > /dev/null
real    0m1.887s
user    0m0.015s
sys     0m0.015s

Локальный компьютер (доступ к подключенному сетевому диску Z)

patrick@local_machine /z (master) $ time git status > /dev/null
real    0m25.500s
user    0m0.000s
sys     0m0.015s

Так как я могу выяснить причину 25-секундного зависания?

2 ответа2

4

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

Проблема в том, что SMB (Server Message Block, также известный как Samba, также известный как Windows File Sharing) является очень "болтливым" протоколом, отправляющим множество маленьких пакетов назад и вперед, и он требует загрузки "ходов приложений", что увеличивает масштаб больше данных вам нужно. "Поворот" - это двустороннее путешествие между клиентом и сервером.

Несколько вещей:

  • Попробуйте ping ваш удаленный хост с вашего локального компьютера. Если это больше, чем 5 миллисекунд, сетевое хранилище, вероятно, не подходит для гораздо большего, чем загрузка нескольких килобайт в несколько файлов. Также проверьте джиттер и потерю пакетов. Джиттер - это когда пинг сильно варьируется между различными значениями, а потеря пакета - это когда пинг полностью сбрасывается (на него не реагируют). Оба очень плохие нарушения, почти так же плохо, как латентность.

  • Попробуйте использовать WireShark для наблюдения за трафиком между вашим хостом и вашим маршрутизатором при выполнении git status . Вероятно, вы увидите много TCP-запросов, которые выглядят примерно так:

  • Пакет выходит с вашей машины

  • Ваша машина ждет (ничего не делает)
  • Сервер отправляет ответ

Для каждого пакета, исходящего с вашего компьютера и предназначенного для удаленного блока, пометьте этот пакет "O" как "исходящий". Для каждого пакета, который отправляется с удаленного устройства и предназначен для вашего компьютера, пометьте этот пакет "I" как "входящий".

  • Подсчитайте количество пакетов "I" в строке без промежуточных пакетов "O".
  • Подсчитайте количество пакетов "O" в строке без промежуточных пакетов "I".
  • Придумайте примерное соотношение количества пакетов "I" к количеству пакетов "O".
  • Если вы читаете (загрузка) файлов, а также отношение высоко не в пользу "I" пакетов (пакеты , приходящие на ваш компьютер), то протокол болтливый.
  • Если вы пишете (загрузка или модифицирующие файлы), а отношение сильно не в пользу "O" пакеты (пакеты , исходящие от компьютера), то протокол болтливый.
  • Проверьте размер каждого пакета относительно ожидаемой пропускной способности соединения при загрузке большого файла по протоколу HTTP.
  • Умножьте задержку на количество циклов и добавьте время передачи файлов, чтобы получить некоторое число, которое должно составлять около 25 секунд.

Решение: уменьшите задержку или используйте более новую версию протокола SMB, поддерживаемую более новыми версиями Windows Server (с меньшим количеством обращений к приложениям и, следовательно, более высокой производительностью по глобальной сети), или используйте что-то вроде FTP, который имеет очень низкое взаимодействие (но все же большие накладные расходы при доступе ко многим файлам), или просто работайте непосредственно на сервере и передавайте данные только по мере необходимости (например, zip-файлы) на удаленный сервер.

1

См. Этот вопрос, чтобы узнать, что можно сделать для ускорения работы сетевого диска, например, перевести его в режим «медленной связи», чтобы файлы в конечном итоге синхронизировались. Это очень помогает, потому что вы читаете и пишете на локальный диск, а не в сеть.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .