Skip to main content

Эта версия GitHub Enterprise Server будет прекращена 2026-08-25. Снятые релизы не поддерживаются. Исправления выпускаться не будут даже при критических проблемах безопасности. Для лучшей производительности, повышения безопасности и новых функций GitHub Enterprise Server см. Обзор процесса обновления. Для помощи с обновлением обращайтесь в GitHub Enterprise Support.

Анализ трафика Git в экземпляре GitHub Enterprise Server

Используйте регулятор для выявления шаблонов трафика Git, которые приводят к нагрузке на экземпляр, чтобы устранить проблемы с медленными операциями Git и снизить влияние на производительность.

О губернаторе

Регулятор — это встроенный монитор для действий Git в вашем экземпляре. ghe-governor Используйте команду, чтобы узнать, какие репозитории, пользователи, IP-адреса и операции Git создают нагрузку.

Используйте эти данные, когда увеличивается использование ЦП, памяти или диска, и необходимо подтвердить, является ли трафик Git причиной. Сведения о синтаксисе команд и вложенных командах см. в разделе Служебные программы командной строки.

Губернатор записывает только операции Git. Он не включает API или веб-трафик. Сведения о проверке операций, выполняемых в настоящее время, см. в программе ghe-btopСлужебные программы командной строки.

Сведения о файлах данных регулятора

Губернатор сохраняет данные в файлах в разделе /data/user/governor/. Каждый файл содержит один час данных и сохраняется в течение двух недель. Имена файлов содержат метки времени Unix, указывающие период времени, охватывающий каждый файл.

Примечание.

В GitHub Enterprise Server версии 3.13 и более ранних версий файлы данных губернатора находятся под /data/user/gitmon/ шаблоном gitmon.<timestamp>.dbименования.

Чтобы подтвердить диапазон данных, хранящиеся на диске, преобразуйте метки времени в самые ранние и последние имена файлов в даты, доступные для чтения человеком.

for epoch in $(sudo ls /data/user/governor/ 2>/dev/null | grep '^governor\.' | sort | sed -n '1p;$p' | cut -f2 -d.); do echo "${epoch} = $(date -d @${epoch})"; done

Выходные данные показывают время начала самых ранних и последних файлов данных.

1551186000 = Tue Feb 26 13:00:00 UTC 2019
1552392000 = Tue Mar 12 12:00:00 UTC 2019

Перед началом работы

Перед выполнением запросов регулятора соберите следующие сведения:

  • SSH-доступ к устройству. Для запуска ghe-governorнеобходимо получить доступ к административной оболочке. См . раздел AUTOTITLE.
  • Какой узел требуется запросить. Для автономных или высокодоступных развертываний запустите на основном узле. Для кластеров выполните запросы на каждом git-server узле, так как ни один узел не содержит весь трафик Git.
  • Окно влияния. Обратите внимание на время начала и окончания сообщаемого снижения, чтобы можно было задать область запросов и -t``-u.
  • Имена репозитория или организации, если у пользователей возникли проблемы с определенными репозиториями или организациями.

Определение того, вносит ли Git вклад в загрузку

Начните с широкой сводки, а затем загрузите атрибуты в определенные репозитории или программы.

  • Суммируйте все последние действия Git в вашем экземпляре:

    ghe-governor health
    
  • Поиск репозиториев с самым медленным средним временем отклика:

    ghe-governor aggregate repo avg_rt
    
  • Поиск репозиториев с самой длинной одной операцией:

    ghe-governor aggregate repo max_rt
    
  • Найдите самые медленные отдельные операции (не сгруппированные):

    ghe-governor top rt -n 50
    
  • Найдите репозитории, потребляющие больше всего времени ЦП:

    ghe-governor aggregate repo cpu
    
  • Для репозитория, который выделяется, найдите, какая подпрограмма Git отвечает за использование ЦП:

    ghe-governor aggregate program cpu -r OWNER/REPOSITORY
    
  • Найдите репозитории, в которых pack-objects использовался больше всего времени ЦП. Программа pack-objects собирает данные, отправляемые клиентам во время клонирования и извлечения; большое число устанавливает значительное давление на ЦП и память на устройство:

    ghe-governor aggregate repo cpu -P pack-objects
    
  • Найдите отдельные операции, которые использовали больше всего времени ЦП (не сгруппированы):

    ghe-governor top cpu -n 50
    
  • Найдите репозитории, на которые выполняется большая часть операций записи диска в течение определенного интервала времени:

    ghe-governor aggregate repo disk_write_kb -t START-TIME -u END-TIME
    
  • Проверьте высокий параллелизм, указывающий на одновременное выполнение многих операций Git:

    ghe-governor aggregate repo max_parallelism
    

Если результаты указывают на определенный репозиторий или программу, перейдите к соответствующему разделу ниже.

Определение верхнего клона и получение трафика

Программа upload-pack обрабатывает данные, обслуживаемых клиентами во время клонирования и получения. Используйте эти запросы, чтобы найти, какие репозитории, пользователи и IP-адреса являются наиболее клонированных и извлекаемых действий.

  • Подсчет операций клонирования и получения по репозиторию:

    ghe-governor aggregate repo count -P upload-pack
    
  • Определите пользователей, выполняющих клоны и извлекает и подсчитывайте свои операции:

    ghe-governor aggregate user_id count -P upload-pack
    
  • Определите IP-адреса, создающие самые клонированные и извлекаемые запросы. Небольшой набор IP-адресов с высоким числом часто указывает на парк запуска CI:

    ghe-governor aggregate ip count -P upload-pack
    
  • Измеряйте общий объем данных, обслуживаемых для каждого репозитория:

    ghe-governor aggregate repo uploaded_kb -P upload-pack
    
  • Измеряйте средний объем данных, отправленных на пользователя:

    ghe-governor aggregate user_id avg_uploaded -P upload-pack
    
  • Поиск пиковых клонов и получение параллелизма для каждого репозитория. В MAXPL столбце отображается наибольшее число одновременных операций, записанных для каждого репозитория. Высокая ценность для небольшого количества репозиториев предлагает гром стада:

    ghe-governor aggregate repo max_parallelism -P upload-pack
    
  • Найдите самые большие отдельные клоны или операции получения (не сгруппированы):

    ghe-governor top uploaded -P upload-pack -n 50
    

Определение трафика с большим количеством push-уведомлений

spokes-receive-pack Программы receive-pack обрабатывают данные, полученные от клиентов во время отправки. Используйте эти запросы для поиска репозиториев, пользователей и IP-адресов, которые создают наиболее принудительное действие.

  • Подсчет операций отправки по репозиторию:

    ghe-governor aggregate repo count -P receive-pack -P spokes-receive-pack
    
  • Определите пользователей, отправленных в организацию, и подсчитайте их операции принудительной отправки:

    ghe-governor aggregate user_id count -o ORGANIZATION -P receive-pack -P spokes-receive-pack
    
  • Измеряйте общий объем данных, полученных для каждого репозитория:

    ghe-governor aggregate repo received_kb -P receive-pack -P spokes-receive-pack
    
  • Определите IP-адреса, отправляя самые push-данные:

    ghe-governor aggregate ip received_kb -P receive-pack -P spokes-receive-pack
    
  • Поиск крупнейших отдельных операций принудительной отправки (не сгруппированных):

    ghe-governor top received -P receive-pack -P spokes-receive-pack -n 50
    

Сузить анализ

Вы можете добавить любое сочетание следующих параметров в ghe-governor top или ghe-governor aggregate команду, чтобы сосредоточить запрос на определенном окне времени, репозитории, владельце или программе.

Фильтры времени

OptionDescription
-t <timespec>Рассмотрим только операции с заданного времени начала. Значение по умолчанию — 48 часов назад.
-u <timespec>Рассмотрим только операции до заданного времени окончания. Значение по умолчанию — текущее время.

Для них принимаются <timespec>следующие форматы.

ФорматExampleMeaning
Метка времени Unix-t 1371614483Секунды с 1 января 1970 г.
метка времени Java-t 1371614483637Миллисекунда с 1 января 1970 г.
Относительные дни-t 1dПоследний день
Относительные часы-t 2hПоследние два часа
Относительные минуты-t 20mПоследние двадцать минут

Фильтры областей

OptionDescription
-r <owner>/<repository>Рассмотрите возможность только операций, соответствующих заданному владельцу и репозиторию. Укажите этот параметр несколько раз для сопоставления нескольких репозиториев.
-o <owner>Рассмотрите возможность только операций, соответствующих заданному владельцу, например пользователю или организации. Укажите этот параметр несколько раз, чтобы соответствовать нескольким владельцам.
-P <program>Рассмотрим только операции, выполняющие определенную подпрограмму Git, например upload-pack, , rev-list``receive-packили pack-objects. Укажите этот параметр несколько раз для сопоставления нескольких программ.
-I <address>Рассмотрим только операции с определенного IP-адреса. Укажите этот параметр несколько раз, чтобы соответствовать нескольким адресам.

Параметры вывода

OptionDescription
-jЗадайте формат выходных данных в формате JSON вместо таблицы ASCII.
-n <N>Ограничение выходных данных до N-записей. Значение по умолчанию — 20 для агрегированных запросов и 200 для основных запросов.
--count-onlyПоказывать только KEY столбцы и COUNT столбцы. Применяется только к агрегатным запросам.

Интерпретация столбцов результатов

В результирующих таблицах отображаются ghe-governor следующие сокращения.

ColumnMeaning
AVG RTСреднее время( в секундах), которое вызовы Git заняли
MAX RTВремя выполнения (в секундах) самого длительного вызова на узел
MAXPL / AVGPLМаксимальный и средний параллелизм: сколько вызовов Git было невыполнено за один раз
CPU/SECСекунды времени ЦП, используемого Git в секунду во время уолл-часов. Разделить на количество ядер ЦП и умножить на 100, чтобы получить процент ЦП для Git. Это значение не может превышать количество ядер ЦП.
UPLДанные сервера, отправленные клиентам, например во время получения и клонирования
RECVДанные сервера, полученные от клиентов, например во время отправки

Столбцы READ, UPL``WRITEи RECV столбцы сообщаются в гигабайтах (ГБ), а соответствующая скорость сообщается в мегабайтах в секунду (МБ/с).

Интерпретация распространенных шаблонов

В следующей таблице приведены распространенные шаблоны выходных данных регулятора с их вероятными причинами.

PatternВероятно, причина
Большое upload-pack число из небольшого набора IP-адресовПарк бегуна CI неоднократно клонирует одну или несколько репозиториев вместо повторного использования локальных касс.
Высокий max_parallelism для небольшого количества репозиториевГром стада: многие бегуни запускают одновременные клоны одновременно, часто потому, что запланированные задания начинаются одновременно
Большой uploaded_kb репозиторий в сочетании с высоким уровнем avg_uploaded на пользователяПовторяющиеся полные клоны; клиенты не используют локальные кассы или не используют неглубокие или частичные клоны
Высокий received_kb для репозитория или организацииРабочая нагрузка с интенсивным использованием push-уведомлений; может включать большие двоичные файлы или частые фиксации в monorepo
Высокий pack-objects уровень ЦП с умеренным числом операцийДорогое упаковка объектов; Репозиторий может воспользоваться запуском обслуживания или использованием частичных клонов на стороне клиента. --filter
Высокий avg_rt или max_rt высокий уровень репозиторияМедленные операции; часто вызваны большими pack-objects запусками, высоким уровнем параллелизма или конфликтов ресурсов из другой рабочей нагрузки

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

  • Повторно используйте локальные кассы. Замените свежие клоны git fetch автоматическими рабочими процессами. Это позволяет избежать передачи полного графа объектов при каждом запуске.
  • Используйте мелкие клоны. Для рабочих процессов, которые не требуют полного журнала фиксации, передайте --depth команду клонирования, например git clone --depth 1. Это сокращает как передаваемые данные, так и работу pack-objects .
  • Используйте частичные клоны. Для репозиториев с большими двоичными объектами или многими файлами, не необходимыми в данном рабочем процессе, используйте --filter для запроса только объектов, необходимых рабочему процессу, например git clone --filter=blob:none.
  • Добавьте локальное зеркало или прокси-сервер кэширования. Для больших флотов runner, которые клонируют одни и те же репозитории неоднократно, вытягивание через прокси-сервер или локальное зеркало может поглощать трафик и уменьшать нагрузку на экземпляр.
  • Ошеломляя запланированные задания. Рабочие процессы CI/CD смещения активируются по расписанию, чтобы не все модули запускались одновременно, уменьшая размер одновременных клонированных всплесков.
  • Уменьшение параллелизма рабочих процессов. Рабочие процессы, которые клонируют несколько репозиториев параллельно, можно перенастроить, чтобы ограничить параллелизм и распространить нагрузку с течением времени.

Когда обратиться в GitHub службу поддержки

Обратитесь Поддержка GitHub Enterprise и включите пакет поддержки, если применяется любой из указанных ниже элементов.

  • Производительность остается низкой после снижения давления клона или ошеломления запланированных заданий.
  • Экземпляр обслуживает распространенные ошибки Git или сбои подключения, которые не объясняются рабочей нагрузкой клиента.
  • Губернатор показывает постоянные max_parallelism значения, предполагающие, что экземпляр находится в емкости или рядом с емкостью, и изменения рабочей нагрузки в одиночку вряд ли устранят проблему.
  • Вы видите четкий шаблон в выходных данных регулятора, но не уверены, как интерпретировать его или какие действия следует предпринять.

Дополнительные сведения о создании пакета поддержки см. в разделе Предоставление данных в поддержку GitHub.

Дополнительные материалы

Дополнительные сведения о системных ресурсах мониторинга см. в разделе О панелях мониторов.