성능 바
GitLab v19.2Offering: GitLab Self-Managed, GitLab Dedicated
성능 바는 브라우저에서 실시간 메트릭을 직접 표시하여 로그를 검토하거나 별도의 프로파일링 도구를 실행하지 않고도 인사이트를 제공합니다. 개발 팀의 경우 성능 바는 집중해야 할 정확한 위치를 보여주어 디버깅을 단순화합니다.
성능 바는 브라우저에서 실시간 메트릭을 직접 표시하여 로그를 검토하거나 별도의 프로파일링 도구를 실행하지 않고도 인사이트를 제공합니다.
개발 팀의 경우 성능 바는 집중해야 할 정확한 위치를 보여주어 디버깅을 단순화합니다.

사용 가능한 정보#
히스토리
- GitLab 16.6에서 Rugged 호출이 제거됨.
왼쪽에서 오른쪽으로 성능 바는 다음을 표시합니다:
- Current Host: 페이지를 제공하는 현재 호스트.
- Database queries:
00ms / 00 (00 cached) pg형식으로 표시되는 소요 시간(밀리초)과 총 데이터베이스 쿼리 수. 더 많은 세부 정보가 있는 대화 상자를 표시하려면 선택합니다. 각 쿼리에 대한 다음 세부 정보를 볼 수 있습니다:- In a transaction: 트랜잭션 컨텍스트에서 실행된 경우 쿼리 아래에 표시됩니다
- Role: 데이터베이스 로드 밸런싱이 활성화된 경우 표시됩니다. 쿼리에 사용된 서버 역할을 보여줍니다. "Primary"는 쿼리가 읽기/쓰기 기본 서버로 전송되었음을 의미합니다. "Replica"는 읽기 전용 복제본으로 전송되었음을 의미합니다.
- Configuration name: 다양한 GitLab 기능에 대해 구성된 다른 데이터베이스를 구별하는 데 사용됩니다. 표시되는 이름은 GitLab에서 데이터베이스 연결을 구성하는 데 사용된 동일한 이름입니다.
- Gitaly calls: 소요 시간(밀리초)과 총 Gitaly 호출 수. 더 많은 세부 정보가 있는 대화 상자를 표시하려면 선택합니다.
- Redis calls: 소요 시간(밀리초)과 총 Redis 호출 수. 더 많은 세부 정보가 있는 대화 상자를 표시하려면 선택합니다.
- Elasticsearch calls: 소요 시간(밀리초)과 총 Elasticsearch 호출 수. 더 많은 세부 정보가 있는 대화 상자를 표시하려면 선택합니다.
- External HTTP calls: 소요 시간(밀리초)과 다른 시스템에 대한 총 외부 호출 수. 더 많은 세부 정보가 있는 대화 상자를 표시하려면 선택합니다.
- 페이지의 Load timings: 브라우저가 로드 타이밍을 지원하는 경우 슬래시로 구분된 여러 밀리초 값. 더 많은 세부 정보가 있는 대화 상자를 표시하려면 선택합니다. 왼쪽에서 오른쪽으로의 값:
- Backend: 기본 페이지를 로드하는 데 필요한 시간.
- First Contentful Paint: 사용자에게 무언가가 표시될 때까지의 시간. 브라우저가 이 기능을 지원하지 않으면
NaN을 표시합니다. - DomContentLoaded 이벤트.
- 페이지가 로드한 Total number of requests.
- Memory: 선택한 요청 중에 소비된 메모리 양과 할당된 객체. 더 많은 세부 정보가 있는 창을 표시하려면 선택합니다.
- Trace: Jaeger가 통합된 경우 Trace는 현재 요청의
correlation_id가 포함된 Jaeger 추적 페이지로 연결됩니다. - +: 요청의 세부 정보를 성능 바에 추가하는 링크. 요청은 전체 URL(현재 사용자로 인증됨) 또는
X-Request-Id헤더 값으로 추가할 수 있습니다. - Download: 성능 바 보고서를 생성하는 데 사용된 원시 JSON을 다운로드하는 링크.
- Memory Report: 현재 URL의 메모리 프로파일링 보고서를 생성하는 링크.
- Flamegraph with mode: 선택한 Stackprof 모드로 현재 URL의 플레임그래프를 생성하는 링크:
- Wall 모드는 벽 시계의 모든 시간 간격을 샘플링합니다. 간격은
10100마이크로초로 설정됩니다. - CPU 모드는 CPU 활동의 모든 간격을 샘플링합니다. 간격은
10100마이크로초로 설정됩니다. - Object 모드는 모든 간격을 샘플링합니다. 간격은
100개의 할당으로 설정됩니다.
- Wall 모드는 벽 시계의 모든 시간 간격을 샘플링합니다. 간격은
- Request Selector: 성능 바 오른쪽에 표시되는 선택 상자로 현재 페이지가 열려 있는 동안 수행된 모든 요청에 대한 이러한 메트릭을 볼 수 있습니다. 고유한 URL당 처음 두 요청만 캡처됩니다.
- Stats (선택 사항):
GITLAB_PERFORMANCE_BAR_STATS_URL환경 변수가 설정된 경우 이 URL이 바에 표시됩니다. GitLab.com에서만 사용됩니다.
모든 지표가 모든 환경에서 사용 가능한 것은 아닙니다. 예를 들어 메모리 보기는 특정 패치가 적용된 Ruby를 실행해야 합니다. GDK를 사용하여 GitLab을 로컬에서 실행하는 경우 일반적으로 이것은 해당하지 않으며 메모리 보기를 사용할 수 없습니다.
키보드 단축키#
p + b 키보드 단축키를 누르면 성능 바가 표시되고, 다시 누르면 숨겨집니다.
관리자가 아닌 사용자가 성능 바를 표시하려면 활성화해야 합니다.
요청 경고#
사전 정의된 제한을 초과하는 요청은 메트릭 옆에 경고(⚠️) 아이콘과 설명이 표시됩니다. 이 예시에서 Gitaly 호출 기간이 임계값을 초과했습니다.

경고 형식#
각 경고 메시지는 다음 형식을 따릅니다:
<metric> <type>: <actual> over <threshold>
예를 들어, es calls: 83 over 5는 83개의 Elasticsearch 호출을 나타내며, 이는 5개의 임계값을 초과합니다.
경고를 트리거할 수 있는 세 가지 임계값 유형이 있습니다:
calls: 요청 중에 서비스에 대해 수행된 총 호출 수.duration: 서비스에 대한 모든 호출에 소요된 총 시간(밀리초).individual call: 서비스에 대한 단일 호출의 시간(밀리초). 개별 호출 경고는 바 자체가 아니라 해당 메트릭의 세부 정보 대화 상자에 표시됩니다.
메트릭 및 기본 임계값#
다음 메트릭은 요청이 해당 임계값을 초과하면 경고를 내보냅니다. 임계값은 프로덕션 환경과 다른 모든 환경 간에 다릅니다. 표에서 (development)로 표시된 값은 개발 및 테스트와 같은 모든 비프로덕션 환경에 적용됩니다. 여기에 표시된 값은 lib/peek/views/ 아래의 소스 파일에 정의된 기본값을 반영합니다.
| Metric | Warning label prefix | Calls threshold | Total duration threshold | Individual call threshold |
|---|---|---|---|---|
| Database (SQL) | active-record | 100 | 3,000 ms (development) / 15,000 ms (production) | 1,000 ms (development) / 5,000 ms (production) |
| Gitaly | gitaly | 30 | 1,000 ms | 500 ms |
| Elasticsearch | es | 5 | 1,000 ms | 1,000 ms |
| External HTTP | external-http | 10 | 1,000 ms | 100 ms |
| ClickHouse | ch | 5 | 1,000 ms | 1,000 ms |
| Zoekt | zkt | 3 (development) / 5 (production) | 500 ms (development) / 1,000 ms (production) | 500 ms (development) / 1,000 ms (production) |
성능 바는 Redis 호출을 추적하고 표시하지만 이에 대한 임계값을 정의하지 않으므로 Redis에 대한 경고를 내보내지 않습니다.
Bullet 메트릭은 위 형식의 예외입니다. Bullet은 N+1 쿼리를 감지하며 기본적으로 개발 환경에서만 실행됩니다. 활성 상태일 때는 임계값 기반 <metric> <type>: <actual> over <threshold> 메시지 대신 고정된 Unoptimized queries detected 경고를 내보냅니다.
데이터베이스 메트릭의 프로덕션 임계값은 개발 기본값보다 높은데, 이는 프로덕션 쿼리가 더 큰 데이터 볼륨에 대해 실행되어 종종 더 오래 걸리기 때문입니다. Zoekt를 제외한 다른 모든 메트릭은 환경 전반에 걸쳐 동일한 임계값을 사용합니다. 이러한 값은 소스 파일에 정의된 구성 가능한 기본값입니다. 임계값이 변경되면 소스 파일이 신뢰할 수 있는 참조입니다.
경고가 조치 가능한 경우#
경고는 요청이 일반적인 페이지에서 예상되는 것보다 더 많은 리소스를 사용함을 나타냅니다. 조사할지 여부를 결정하려면 다음 지침을 사용하세요:
- 높은 호출 수(예:
gitaly calls: 45 over 30)는 종종 동일한 유형의 호출이 루프에서 반복되는 N+1 패턴을 나타냅니다. 메트릭을 선택하여 세부 정보 대화 상자를 열고 유사한 매개변수를 가진 반복 호출을 찾으세요. - 높은 총 소요 시간(예:
active-record duration: 4500 over 3000)은 서비스가 전반적으로 느리다는 것을 의미합니다. 소수의 비용이 큰 호출이 원인인지, 아니면 많은 작은 호출이 누적된 것인지 확인하세요. - 높은 개별 호출 소요 시간은 특정 호출 옆의 세부 정보 대화 상자에 표시됩니다. 단일 느린 호출은 종종 누락된 인덱스, 큰 페이로드 또는 최적화되지 않은 쿼리를 가리킵니다.
일부 경고는 특정 컨텍스트에서 예상되는 노이즈입니다:
- 여러 프로젝트나 그룹에 걸쳐 데이터를 집계하는 페이지(예: 대시보드 또는 그룹 개요 페이지)는 단일 리소스 페이지보다 더 많은 호출을 수행합니다.
- 작은 데이터셋을 가진 개발 환경은 프로덕션에서는 발생하지 않는 소요 시간 경고를 트리거할 수 있으며, 프로덕션 데이터 볼륨은 개발에서는 발생하지 않는 경고를 트리거할 수 있습니다.
관리자가 아닌 사용자에 대해 성능 바 활성화 {#enable-the-performance-bar-for-non-administrators}#
성능 바는 기본적으로 관리자가 아닌 사용자에게 비활성화됩니다. 주어진 그룹에 대해 활성화하려면:
- 관리자 액세스 권한이 있는 사용자로 로그인합니다.
- 오른쪽 상단에서 Admin을 선택합니다.
- 왼쪽 사이드바에서 Settings > Metrics and profiling을 선택합니다.
- Profiling - Performance bar를 펼칩니다.
- Allow non-administrators access to the performance bar를 선택합니다.
- Allow access to members of the following group 필드에 성능에 액세스할 수 있는 그룹의 전체 경로를 제공합니다.
- Save changes를 선택합니다.