25.9 이전 버전에서의 할당 프로파일링
ClickHouse는 전역 할당자로 jemalloc을 사용합니다. Jemalloc에는 메모리 할당 샘플링 및 프로파일링을 위한 몇 가지 도구가 포함되어 있습니다.
할당 프로파일링을 보다 편리하게 수행할 수 있도록 Keeper에는 SYSTEM 명령과 함께 four letter word(4LW) 명령이 제공됩니다.
할당 샘플링과 힙 프로파일 플러시
jemalloc에서 메모리 할당을 샘플링하고 프로파일링하려면 환경 변수 MALLOC_CONF로 프로파일링을 활성화한 상태에서 ClickHouse/Keeper를 시작해야 합니다:
jemalloc은(는) 메모리 할당을 샘플링하고 해당 정보를 내부에 저장합니다.
다음 명령을 실행하여 jemalloc에 현재 프로파일을 플러시하도록 지시할 수 있습니다:
- ClickHouse
- Keeper
기본적으로 힙 프로파일 파일은 /tmp/jemalloc_clickhouse._pid_._seqnum_.heap 경로에 생성되며, 여기서 _pid_는 ClickHouse의 PID이고 _seqnum_은 현재 힙 프로파일에 대한 전역 시퀀스 번호입니다.
Keeper의 기본 파일은 /tmp/jemalloc_keeper._pid_._seqnum_.heap이며 동일한 규칙을 따릅니다.
MALLOC_CONF 환경 변수에 prof_prefix 옵션을 추가하여 다른 위치를 지정할 수 있습니다.
예를 들어 /data 폴더에 프로파일을 생성하고 파일 이름 접두사를 my_current_profile로 지정하려는 경우, 다음과 같이 환경 변수를 설정하여 ClickHouse/Keeper를 실행하면 됩니다:
생성된 파일 이름에는 접두사 뒤에 PID와 시퀀스 번호가 붙습니다.
힙 프로파일 분석
힙 프로파일이 생성된 후에는 이를 분석해야 합니다.
이를 위해 jemalloc의 도구인 jeprof를 사용할 수 있습니다. 이 도구는 다음과 같은 방법으로 설치할 수 있습니다:
- 시스템 패키지 관리자를 사용합니다.
- jemalloc 저장소를 클론한 후 루트 폴더에서
autogen.sh를 실행합니다. 이렇게 하면bin폴더 안에jeprof스크립트가 제공됩니다.
jeprof를 사용하여 힙 프로파일(heap profile)에서 생성할 수 있는 형식은 매우 다양합니다.
도구의 사용 방법과 제공되는 다양한 옵션에 대한 정보는 jeprof --help를 실행하여 확인하는 것이 좋습니다.
일반적으로 jeprof 명령은 다음과 같이 사용합니다:
두 프로파일 간에 어떤 메모리 할당이 발생했는지 비교하려면 base 인자를 설정하십시오:
예시
- 각 프로시저를 한 줄에 하나씩 기록한 텍스트 파일을 생성하려면:
- 호출 그래프가 포함된 PDF 파일을 생성하려면:
플레임 그래프 생성
jeprof를 사용하여 플레임 그래프 생성을 위한 접힌 스택(collapsed stack)을 만들 수 있습니다.
--collapsed 옵션을 사용해야 합니다:
그 후에는 축약된 스택(collapsed stack)을 시각화하기 위해 다양한 도구를 사용할 수 있습니다.
가장 널리 사용되는 도구는 flamegraph.pl 스크립트를 포함하는 FlameGraph입니다.
또 하나의 유용한 도구로, 수집된 스택을 보다 대화형으로 분석할 수 있게 해주는 speedscope가 있습니다.
런타임 중 allocation profiler 제어
ClickHouse/Keeper를 profiler를 활성화한 상태로 시작한 경우, 런타임 중에 allocation profiling을 비활성화/활성화하기 위한 추가 명령을 사용할 수 있습니다. 이러한 명령을 사용하면 특정 구간만 선택적으로 프로파일링하기가 더 쉽습니다.
profiler를 비활성화하려면:
- ClickHouse
- Keeper
profiler를 활성화하려면:
- ClickHouse
- Keeper
또한 기본적으로 활성화되어 있는 prof_active 옵션을 설정하여 profiler의 초기 상태를 제어할 수도 있습니다.
예를 들어, 시작 시점에는 메모리 allocation을 샘플링하지 않고 이후부터만 샘플링하려는 경우, profiler를 활성화하도록 설정할 수 있습니다. 다음과 같은 환경 변수를 설정하여 ClickHouse/Keeper를 시작할 수 있습니다:
프로파일러는 추후에 활성화할 수 있습니다.
프로파일러를 위한 추가 옵션
jemalloc에는 프로파일러와 관련된 다양한 옵션이 있습니다. 이러한 옵션은 MALLOC_CONF 환경 변수를 수정하여 제어할 수 있습니다.
예를 들어, 할당 샘플 간의 간격은 lg_prof_sample로 제어할 수 있습니다.
힙 프로파일을 N 바이트마다 덤프하려면 lg_prof_interval을 사용하여 활성화할 수 있습니다.
전체 옵션 목록은 jemalloc 참조 페이지를 참조하는 것이 좋습니다.
기타 자료
ClickHouse/Keeper는 jemalloc 관련 메트릭을 여러 가지 방식으로 노출합니다.
이러한 메트릭은 서로 동기화되지 않으며 값이 서로 어긋날 수 있다는 점을 반드시 유의해야 합니다.
시스템 테이블 asynchronous_metrics
시스템 테이블 jemalloc_bins
jemalloc 할당자를 통해 서로 다른 크기 클래스(빈)에서 수행된 메모리 할당 정보를, 모든 arena에서 집계한 형태로 제공합니다.
Prometheus
asynchronous_metrics의 모든 jemalloc 관련 메트릭은 ClickHouse와 Keeper 모두에서 Prometheus 엔드포인트를 통해서도 노출됩니다.
Keeper의 jmst 4LW 명령
Keeper는 jmst 4LW 명령을 지원하며, 이 명령은 기본 allocator 통계를 반환합니다: