О губернаторе
Регулятор — это встроенный монитор для действий 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 команду, чтобы сосредоточить запрос на определенном окне времени, репозитории, владельце или программе.
Фильтры времени
| Option | Description |
|---|---|
-t <timespec> | Рассмотрим только операции с заданного времени начала. Значение по умолчанию — 48 часов назад. |
-u <timespec> | Рассмотрим только операции до заданного времени окончания. Значение по умолчанию — текущее время. |
Для них принимаются <timespec>следующие форматы.
| Формат | Example | Meaning |
|---|---|---|
| Метка времени Unix | -t 1371614483 | Секунды с 1 января 1970 г. |
| метка времени Java | -t 1371614483637 | Миллисекунда с 1 января 1970 г. |
| Относительные дни | -t 1d | Последний день |
| Относительные часы | -t 2h | Последние два часа |
| Относительные минуты | -t 20m | Последние двадцать минут |
Фильтры областей
| Option | Description |
|---|---|
-r <owner>/ | Рассмотрите возможность только операций, соответствующих заданному владельцу и репозиторию. Укажите этот параметр несколько раз для сопоставления нескольких репозиториев. |
-o <owner> | Рассмотрите возможность только операций, соответствующих заданному владельцу, например пользователю или организации. Укажите этот параметр несколько раз, чтобы соответствовать нескольким владельцам. |
-P <program> | Рассмотрим только операции, выполняющие определенную подпрограмму Git, например upload-pack, , rev-list``receive-packили pack-objects. Укажите этот параметр несколько раз для сопоставления нескольких программ. |
-I <address> | Рассмотрим только операции с определенного IP-адреса. Укажите этот параметр несколько раз, чтобы соответствовать нескольким адресам. |
Параметры вывода
| Option | Description |
|---|---|
-j | Задайте формат выходных данных в формате JSON вместо таблицы ASCII. |
-n <N> | Ограничение выходных данных до N-записей. Значение по умолчанию — 20 для агрегированных запросов и 200 для основных запросов. |
--count-only | Показывать только KEY столбцы и COUNT столбцы. Применяется только к агрегатным запросам. |
Интерпретация столбцов результатов
В результирующих таблицах отображаются ghe-governor следующие сокращения.
| Column | Meaning |
|---|---|
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 запусками, высоким уровнем параллелизма или конфликтов ресурсов из другой рабочей нагрузки |
Рекомендуемые действия для уменьшения нагрузки Git
Если данные губернатора показывают, что репозиторий, пользователь или парк 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.
Дополнительные материалы
Дополнительные сведения о системных ресурсах мониторинга см. в разделе О панелях мониторов.