SYSTEM 명령, 그리고 Keeper의 4문자 명령(4LW)을 사용해 샘플링을 제어할 수 있습니다. 결과를 확인하는 방법은 여러 가지가 있습니다.
- 쿼리별 분석을 위해
JemallocSample유형으로 샘플을system.trace_log에 수집합니다. - 내장된 jemalloc web UI에서 실시간 메모리 통계를 확인하고 힙 프로파일을 가져옵니다(26.2+).
system.jemalloc_profile_text를 사용해 현재 힙 프로파일을 SQL에서 직접 쿼리합니다(26.2+).- 힙 프로파일을 디스크에 플러시한 뒤
jeprof로 분석합니다.
이 가이드는 25.9+ 버전에 적용됩니다.
이전 버전은 25.9 이전 버전용 할당 프로파일링을 확인하십시오.
메모리 할당 샘플링
jemalloc_enable_global_profiler 설정을 활성화한 상태로 ClickHouse/Keeper를 시작합니다:
jemalloc은 메모리 할당을 샘플링하고 해당 정보를 내부적으로 저장합니다.
jemalloc_enable_profiler 설정을 사용하면 쿼리별 샘플링도 활성화할 수 있습니다.
system.trace_log에 jemalloc 샘플 저장
JemallocSample 유형으로 jemalloc 샘플을 system.trace_log에 저장할 수 있습니다.
전체적으로 활성화하려면 jemalloc_collect_global_profile_samples_in_trace_log 설정을 사용하세요:
jemalloc_collect_profile_samples_in_trace_log 설정을 사용하면 쿼리별로도 이를 활성화할 수 있습니다.
예시: 쿼리의 메모리 사용량 분석
system.trace_log에 수집합니다:
ClickHouse를
jemalloc_enable_global_profiler와 함께 시작한 경우 jemalloc_enable_profiler를 활성화할 필요가 없습니다.
jemalloc_collect_global_profile_samples_in_trace_log와 jemalloc_collect_profile_samples_in_trace_log도 동일합니다.system.trace_log를 플러시합니다:
Jemalloc 웹 UI
이 섹션은 버전 26.2 이상에 적용됩니다.
/jemalloc HTTP 엔드포인트에서 jemalloc 메모리 통계를 확인할 수 있는 내장 웹 UI를 제공합니다.
이 UI는 allocated, active, resident, mapped 메모리를 비롯한 실시간 메모리 메트릭을 차트로 표시하며, arena별 및 빈(bin)별 통계도 제공합니다.
또한 UI에서 전역 및 쿼리별 힙 프로파일을 직접 가져올 수 있습니다.
- ClickHouse
- Keeper
SQL에서 힙 프로파일 가져오기
이 섹션은 버전 26.2 이상에 적용됩니다.
system.jemalloc_profile_text 시스템 테이블을 사용하면 외부 도구 없이, 먼저 디스크에 플러시하지 않고도 현재 jemalloc 힙 프로파일을 SQL에서 직접 가져와 볼 수 있습니다.
이 테이블에는 단일 컬럼이 있습니다:
| Column | Type | Description |
|---|---|---|
line | String | 심볼화된 jemalloc 힙 프로파일의 한 줄 |
출력 형식
jemalloc_profile_text_output_format 설정으로 제어되며, 이 설정은 다음 3가지 값을 지원합니다.
raw— jemalloc이 생성한 원시 힙 프로파일입니다.symbolized— 함수 심볼이 내장된 jeprof 호환 형식입니다. 심볼이 이미 내장되어 있으므로jeprof는 ClickHouse 바이너리 없이도 출력을 분석할 수 있습니다.collapsed(기본값) — 바이트 수와 함께 한 줄에 하나의 스택이 기록되는 플레임 그래프 호환 collapsed stacks 형식입니다.
추가 설정
jemalloc_profile_text_symbolize_with_inline(Bool, 기본값:true) — 심볼화 시 인라인 프레임을 포함할지 여부를 지정합니다. 이 옵션을 비활성화하면 심볼화 속도가 크게 빨라지지만, 인라인된 함수 호출이 스택에 표시되지 않아 정밀도가 떨어집니다.symbolized및collapsed포맷에만 영향을 줍니다.jemalloc_profile_text_collapsed_use_count(Bool, 기본값:false) —collapsed포맷을 사용할 때 바이트 대신 할당 횟수 기준으로 집계합니다.
예시: SQL로 플레임 그래프 생성
collapsed이므로 출력을 FlameGraph로 직접 파이프할 수 있습니다:
힙 프로파일을 디스크에 플러시하기
jeprof로 오프라인 분석을 하기 위해 힙 프로파일을 파일로 저장해야 하는 경우, 이를 디스크에 플러시할 수 있습니다.
기본적으로 힙 프로파일 파일은 /tmp/jemalloc_clickhouse._pid_._seqnum_.heap에 생성됩니다. 여기서 _pid_는 ClickHouse의 PID이고 _seqnum_은 현재 힙 프로파일의 전역 시퀀스 번호입니다.
Keeper의 경우 기본 파일은 /tmp/jemalloc_keeper._pid_._seqnum_.heap이며, 동일한 규칙을 따릅니다.
현재 프로파일을 플러시하려면 다음을 실행하십시오.
- ClickHouse
- Keeper
MALLOC_CONF 환경 변수에 prof_prefix 옵션을 추가해 다른 위치를 지정할 수 있습니다.
예를 들어, 파일 이름 접두사를 my_current_profile로 하여 /data 폴더에 프로파일을 생성하려면 다음 환경 변수와 함께 ClickHouse/Keeper를 실행하면 됩니다.
jeprof를 사용한 힙 프로파일 파일 분석
jemalloc 도구를 사용해 분석할 수 있습니다. jeprof는 여러 가지 방법으로 설치할 수 있습니다:
- 시스템 패키지 관리자를 사용합니다
- jemalloc 저장소를 클론한 다음 루트 디렉터리에서
autogen.sh를 실행합니다. 그러면bin폴더에 있는jeprof스크립트를 사용할 수 있습니다
jeprof --help를 실행해 확인하십시오.
심볼화된 힙 프로파일
SYSTEM JEMALLOC FLUSH PROFILE로 플러시할 때 심볼화된 힙 프로파일을 자동으로 생성합니다.
심볼화된 프로파일(.symbolized 확장자)에는 함수 심볼이 내장되어 있으므로 ClickHouse 바이너리 없이도 jeprof로 분석할 수 있습니다.
예를 들어, 다음을 실행하면:
/tmp/jemalloc_clickhouse.12345.0.heap.symbolized)를 반환합니다.
그런 다음 jeprof를 사용해 이를 직접 분석할 수 있습니다:
바이너리가 필요하지 않습니다: 심볼화된 프로파일(
.symbolized 파일)을 사용하는 경우 jeprof에 ClickHouse 바이너리 경로를 지정할 필요가 없습니다. 따라서 다른 머신에서 프로파일을 분석하거나 바이너리가 업데이트된 후에 분석할 때도 훨씬 수월합니다.심볼 정보가 없는 프로필의 경우 또는
jeprof는 스택트레이스를 생성하기 위해 addr2line을 사용하므로 매우 느릴 수 있습니다.
이런 경우에는 이 도구의 대체 구현을 설치하는 것이 좋습니다.llvm-addr2line도 동일하게 잘 작동합니다(단, llvm-objdump는 jeprof와 호환되지 않으므로 유의하십시오)이후에는 다음과 같이 사용할 수 있습니다. jeprof --tools addr2line:/usr/bin/llvm-addr2line,nm:/usr/bin/llvm-nm,objdump:/usr/bin/objdump,c++filt:/usr/bin/llvm-cxxfilt--base 인수를 사용할 수 있습니다:
예시
- 각 프로시저를 줄별로 기록한 텍스트 파일을 생성합니다:
- 콜 그래프가 포함된 PDF 파일을 생성합니다:
- 각 프로시저를 한 줄에 하나씩 적은 텍스트 파일을 생성합니다:
- 호출 그래프가 포함된 PDF 파일을 생성합니다:
플레임 그래프 생성하기
jeprof를 사용하면 플레임 그래프를 생성하는 데 필요한 collapsed stacks를 만들 수 있습니다.
--collapsed 인수를 사용해야 합니다:
flamegraph.pl이라는 스크립트가 포함되어 있습니다:
프로파일러 추가 옵션
jemalloc에는 프로파일러와 관련된 다양한 옵션이 있으며, MALLOC_CONF 환경 변수를 수정해 제어할 수 있습니다.
예를 들어, 할당 샘플 간 인터벌은 lg_prof_sample로 제어할 수 있습니다.
N바이트마다 힙 프로파일을 dump하려면 lg_prof_interval을 활성화하면 됩니다.
전체 옵션 목록은 jemalloc의 참고 페이지에서 확인하는 것이 좋습니다.
기타 리소스
jemalloc 관련 메트릭을 여러 방식으로 노출합니다.
시스템 테이블 asynchronous_metrics
시스템 테이블 jemalloc_bins
시스템 테이블 jemalloc_stats (26.2+)
malloc_stats_print()의 전체 출력 결과를 하나의 문자열로 반환합니다. SYSTEM JEMALLOC STATS 명령과 동일합니다.
Prometheus
asynchronous_metrics의 모든 jemalloc 관련 메트릭은 ClickHouse와 Keeper 모두에서 Prometheus 엔드포인트를 통해서도 제공됩니다.
참고
Keeper의 jmst 4LW 명령
jmst 4LW 명령을 지원합니다: