할당 프로파일링

할당 프로파일링 (Allocation profiling)

ClickHouse는 전역 할당자로 jemalloc을 사용합니다. jemalloc은 할당 샘플링과 프로파일링 도구를 제공하며, ClickHouse/Keeper는 설정·쿼리 설정·SYSTEM 명령·Keeper의 4LW 명령으로 샘플링을 제어할 수 있게 합니다.

출처: 문서

본문

ClickHouse는 전역 할당자로 jemalloc을 사용합니다. Jemalloc은 할당 샘플링과 프로파일링을 위한 도구와 함께 제공됩니다.

ClickHouse와 Keeper는 설정, 쿼리 설정, SYSTEM 명령, Keeper의 4글자 단어(4LW) 명령으로 샘플링을 제어할 수 있게 합니다. 결과를 검사하는 여러 방법이 있습니다:

  • 샘플을 JemallocSample 타입으로 system.trace_log에 수집해 쿼리별 분석.
  • 내장 jemalloc 웹 UI(26.2+)를 통해 실시간 메모리 통계 보기와 힙 프로필 가져오기.
  • system.jemalloc_profile_text(26.2+)를 사용해 현재 힙 프로필을 SQL에서 직접 조회.
  • system.jemalloc_sampled_allocations(26.9+)를 사용해 SQL에서 메모리 단편화 분석.
  • 힙 프로필을 디스크로 플러시하고 jeprof로 분석.

이 가이드는 25.9+ 버전에 적용됩니다. 이전 버전은 25.9 이전 버전의 할당 프로파일링을 확인하세요.

할당 샘플링

할당을 샘플링하고 프로파일링하려면 jemalloc_enable_global_profiler 설정이 활성화된 채 ClickHouse/Keeper를 시작하세요:

<clickhouse>
    <jemalloc_enable_global_profiler>1</jemalloc_enable_global_profiler>
</clickhouse>

jemalloc은 할당을 샘플링하고 정보를 내부적으로 저장합니다.

또한 jemalloc_enable_profiler 설정으로 쿼리별로 샘플링을 활성화할 수 있습니다.

경고 ClickHouse는 할당이 많은 애플리케이션이므로 jemalloc 샘플링이 성능 오버헤드를 일으킬 수 있습니다.

system.trace_log에 jemalloc 샘플 저장

jemalloc 샘플을 JemallocSample 타입으로 system.trace_log에 저장할 수 있습니다. 전역으로 활성화하려면 jemalloc_collect_global_profile_samples_in_trace_log 설정을 사용하세요:

<clickhouse>
    <jemalloc_collect_global_profile_samples_in_trace_log>1</jemalloc_collect_global_profile_samples_in_trace_log>
</clickhouse>

경고 ClickHouse는 할당이 많은 애플리케이션이므로 system.trace_log에 모든 샘플을 수집하면 높은 부하가 발생할 수 있습니다.

또한 jemalloc_collect_profile_samples_in_trace_log 설정으로 쿼리별로 활성화할 수 있습니다.

예제: 쿼리의 메모리 사용 분석

먼저 jemalloc 프로파일러가 활성화된 채 쿼리를 실행하고 샘플을 system.trace_log에 수집합니다:

SELECT *
FROM numbers(1000000)
ORDER BY number DESC
SETTINGS max_bytes_ratio_before_external_sort = 0
FORMAT `Null`
SETTINGS jemalloc_enable_profiler = 1, jemalloc_collect_profile_samples_in_trace_log = 1

Query id: 8678d8fe-62c5-48b8-b0cd-26851c62dd75

Ok.

0 rows in set. Elapsed: 0.009 sec. Processed 1.00 million rows, 8.00 MB (108.58 million rows/s., 868.61 MB/s.)
Peak memory usage: 12.65 MiB.

ClickHouse가 jemalloc_enable_global_profiler로 시작되었다면 jemalloc_enable_profiler를 활성화할 필요가 없습니다. jemalloc_collect_global_profile_samples_in_trace_logjemalloc_collect_profile_samples_in_trace_log도 마찬가지입니다.

system.trace_log를 플러시합니다:

SYSTEM FLUSH LOGS trace_log

그런 다음 시간 경과에 따른 누적 메모리 사용을 얻기 위해 쿼리합니다:

WITH per_bucket AS
(
    SELECT
        event_time_microseconds AS bucket_time,
        sum(size) AS bucket_sum
    FROM system.trace_log
    WHERE trace_type = 'JemallocSample'
      AND query_id = '8678d8fe-62c5-48b8-b0cd-26851c62dd75'
    GROUP BY bucket_time
)
SELECT
    bucket_time,
    sum(bucket_sum) OVER (
        ORDER BY bucket_time ASC
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS cumulative_size,
    formatReadableSize(cumulative_size) AS cumulative_size_readable
FROM per_bucket
ORDER BY bucket_time

메모리 사용이 가장 높았던 시점을 찾습니다:

SELECT
    argMax(bucket_time, cumulative_size),
    max(cumulative_size)
FROM
(
    WITH per_bucket AS
    (
        SELECT
            event_time_microseconds AS bucket_time,
            sum(size) AS bucket_sum
        FROM system.trace_log
        WHERE trace_type = 'JemallocSample'
          AND query_id = '8678d8fe-62c5-48b8-b0cd-26851c62dd75'
        GROUP BY bucket_time
    )
    SELECT
        bucket_time,
        sum(bucket_sum) OVER (
            ORDER BY bucket_time ASC
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        ) AS cumulative_size,
        formatReadableSize(cumulative_size) AS cumulative_size_readable
    FROM per_bucket
    ORDER BY bucket_time
)

그 결과를 사용해 최고점에서 가장 활발했던 할당 스택을 확인합니다:

SELECT
    concat(
        '\n',
        arrayStringConcat(
            arrayMap(
                (x, y) -> concat(x, ': ', y),
                arrayMap(x -> addressToLine(x), allocation_trace),
                arrayMap(x -> demangle(addressToSymbol(x)), allocation_trace)
            ),
            '\n'
        )
    ) AS symbolized_trace,
    sum(s) AS per_trace_sum
FROM
(
    SELECT
        ptr,
        sum(size) AS s,
        argMax(trace, event_time_microseconds) AS allocation_trace
    FROM system.trace_log
    WHERE trace_type = 'JemallocSample'
      AND query_id = '8678d8fe-62c5-48b8-b0cd-26851c62dd75'
      AND event_time_microseconds <= '2025-09-04 11:56:21.737139'
    GROUP BY ptr
    HAVING s > 0
)
GROUP BY ALL
ORDER BY per_trace_sum ASC

Jemalloc 웹 UI

이 섹션은 26.2+ 버전에 적용됩니다.

ClickHouse는 /jemalloc HTTP 엔드포인트에서 jemalloc 메모리 통계를 보기 위한 내장 웹 UI를 제공합니다. 차트와 함께 할당된(allocated), 활성(active), 상주(resident), 매핑된(mapped) 메모리를 포함한 실시간 메모리 메트릭과 아레나별·빈(bin)별 통계를 표시합니다. 또한 UI에서 전역 및 쿼리별 힙 프로필을 가져올 수 있습니다.

  • ClickHouse
  • Keeper
http://localhost:8123/jemalloc

서버 UI는 Summary, Allocations, Arenas, Operations, Global Profiler, Query Profiler, Fragmentation, Raw Output 등 모든 탭을 포함합니다.

http://localhost:9182/jemalloc

Keeper UI는 HTTP 제어 포트에서 사용할 수 있습니다. 이 포트는 기본적으로 비활성화되어 있으며, Keeper 구성에서 keeper_server.http_control.port를 설정해 명시적으로 활성화해야 합니다:

<clickhouse>
    <keeper_server>
        <http_control>
            <port>9182</port>
        </http_control>
    </keeper_server>
</clickhouse>

활성화되면 UI는 서버와 같은 시각화 — Summary, Allocations, Arenas, Operations, Global Profiler, Raw Output — 를 제공하며, 시스템 테이블에 대한 SQL 접근이 필요한 Query Profiler와 Fragmentation 탭을 제외합니다. 보안 Keeper HTTP 제어 포트는 애플리케이션 수준 인증이 없습니다. 모든 데이터 쿼리가 SQL HTTP 핸들러를 거쳐 사용자·비밀번호 자격 증명이 필요한 ClickHouse Server jemalloc UI와 달리, Keeper REST API 엔드포인트는 인증되지 않습니다. 이것은 다른 Keeper HTTP 제어 엔드포인트(commands, storage, dashboard)와 일관됩니다. 네트워크 수준 제어로 이 포트에 대한 접근을 제한하세요: Keeper를 localhost에 바인딩하거나, 방화벽 규칙을 사용하거나, 인증이 있는 리버스 프록시 뒤에 두세요. listen_host가 구성되지 않으면 Keeper는 기본적으로 localhost에서만 수신합니다. Keeper는 프로그래밍 접근을 위한 REST API 엔드포인트도 노출합니다:

  • GET /jemalloc/stats — 원시 malloc_stats_print 출력
  • GET /jemalloc/status — JSON으로 프로파일링 상태(prof_enabled, prof_active, thread_active_init, lg_sample)
  • GET /jemalloc/profile?format={collapsed|raw} — 서버 측 심볼화와 함께 힙 프로필 플러시, 플레임 그래프 렌더링에 적합한 콜랩스된 스택(기본) 또는 원시 jemalloc 덤프 반환

SQL에서 힙 프로필 가져오기

이 섹션은 26.2+ 버전에 적용됩니다.

system.jemalloc_profile_text 시스템 테이블은 외부 도구 없이, 먼저 디스크로 플러시하지 않고도 현재 jemalloc 힙 프로필을 SQL에서 직접 가져와 볼 수 있게 합니다.

테이블은 단일 컬럼을 가집니다:

컬럼 타입 설명
line String 심볼화된 jemalloc 힙 프로필의 라인.

테이블을 직접 쿼리할 수 있습니다 — 미리 힙 프로필을 플러시할 필요가 없습니다:

SELECT * FROM system.jemalloc_profile_text

출력 형식

출력 형식은 jemalloc_profile_text_output_format 설정으로 제어되며, 세 가지 값을 지원합니다:

  • raw — jemalloc이 생성한 원시 힙 프로필.
  • symbolized — 함수 심볼이 포함된 jeprof 호환 형식. 심볼이 이미 포함되어 있으므로 jeprof는 ClickHouse 바이너리 없이 출력을 분석할 수 있습니다.
  • collapsed(기본) — FlameGraph 호환 콜랩스된 스택, 한 줄에 하나의 스택과 바이트 수.

예를 들어 원시 프로필을 얻으려면:

SELECT * FROM system.jemalloc_profile_text
SETTINGS jemalloc_profile_text_output_format = 'raw'

심볼화된 출력을 얻으려면:

SELECT * FROM system.jemalloc_profile_text
SETTINGS jemalloc_profile_text_output_format = 'symbolized'

추가 설정

  • jemalloc_profile_text_symbolize_with_inline (Bool, 기본: true) — 심볼화 시 인라인 프레임을 포함할지 여부. 비활성화하면 심볼화가 크게 빨라지지만 인라인 함수 호출이 스택에 나타나지 않아 정밀도가 떨어집니다. symbolizedcollapsed 형식에만 영향.
  • jemalloc_profile_text_collapsed_use_count (Bool, 기본: false) — collapsed 형식을 사용할 때 바이트 대신 할당 개수로 집계.

예제: SQL에서 플레임 그래프 생성

기본 출력 형식이 collapsed이므로 출력을 직접 FlameGraph로 파이프할 수 있습니다:

clickhouse-client -q "SELECT * FROM system.jemalloc_profile_text" | flamegraph.pl --color=mem --title="Allocation Flame Graph" --width 2400 > result.svg

바이트 대신 할당 개수로 플레임 그래프를 생성하려면:

clickhouse-client -q "SELECT * FROM system.jemalloc_profile_text SETTINGS jemalloc_profile_text_collapsed_use_count = 1" | flamegraph.pl --color=mem --title="Allocation Count Flame Graph" --width 2400 > result.svg

SQL에서 단편화 분석

이 섹션은 26.9+ 버전에 적용됩니다.

jemalloc은 작은 할당을 slab에서 제공합니다: 한 크기 클래스의 영역으로 나뉜 고정 크기 메모리 블록. slab은 안의 모든 영역이 비어 있을 때만 해제됩니다. 크기 클래스의 대부분 할당이 빠르게 해제되지만 일부가 오래 살아 있으면, slab은 대부분 비어 있는 영역과 함께 고정된 채 남습니다. 메모리는 상주하지만 할당되지는 않습니다. 이것이 여기서 말하는 단편화(fragmentation)입니다.

두 시스템 테이블이 그것이 어디서 오는지 찾는 데 도움이 됩니다:

  • system.jemalloc_arena_bins는 각 크기 클래스가 각 아레나에서 얼마나 많은 메모리를 낭비하는지 보여 줍니다. waste는 slab에 있지만 활성 할당에 사용되지 않는 바이트입니다. purpose는 전용 아레나(mergetree, jit, cache)를 표시합니다. 그것들은 설계상 오래 사는 데이터를 보유하므로, 예상치 못한 단편화를 찾을 때 purpose = ''로 필터링하세요. system.jemalloc_bins는 아레나 전체에 합산된 같은 데이터를 가집니다.
  • system.jemalloc_sampled_allocations는 현재 살아 있는 샘플링된 할당을 나열합니다. 샘플당 한 행: 백트레이스(trace), 얼마나 오래 살았는지(age_ns), 크기와 크기 클래스, 아레나. 테이블을 읽으면 새 힙 프로필이 플러시됩니다.

아레나와 크기 클래스로 조인하면 어떤 코드가 낭비적인 크기 클래스에서 오래된 객체를 할당했는지 보여 줍니다.

결과를 읽을 때 명심하세요:

  • 프로파일러가 활성화된 스레드만 샘플을 만듭니다(설정의 jemalloc_enable_global_profiler 또는 jemalloc_enable_profiler 설정).
  • 각 행은 약 weight개의 실제 할당을 나타내며, 작은 할당은 드물게 샘플링됩니다. 관심 있는 크기 클래스에 샘플이 없으면 jemalloc_profiler_sampling_rate를 조정하세요.
  • 샘플링된 할당은 slab에 저장되지 않으므로 waste에 추가되지 않습니다. 그 크기 클래스에서 어떤 코드가 할당하는지만 알려 줍니다.
  • 샘플마다 할당이 해제될 때까지 두 페이지(64 KiB 페이지 빌드에서는 128 KiB)의 추가 비용이 듭니다. 프로파일러를 비활성화하면 새 샘플이 멈추지만 기존 샘플은 해제되지 않습니다.

다음 쿼리는 1 MiB 이상 낭비하는 크기 클래스에서 1분보다 오래된 할당의 백트레이스를 나열합니다:

WITH 60e9 AS min_age_ns
SELECT
    b.arena,
    b.size AS reg_size,
    b.waste AS class_waste,
    s.est_old_objects,
    s.stack
FROM system.jemalloc_arena_bins AS b
INNER JOIN
(
    SELECT
        arena,
        size_class,
        sum(weight) AS est_old_objects,
        arrayStringConcat(arrayMap(a -> demangle(addressToSymbol(a)), arrayReverse(trace)), ';') AS stack
    FROM system.jemalloc_sampled_allocations
    WHERE age_ns > min_age_ns
    GROUP BY arena, size_class, trace
) AS s ON s.size_class = b.index AND s.arena = b.arena
WHERE b.large = 0 AND b.purpose = '' AND b.waste > 1048576
ORDER BY b.waste DESC, s.est_old_objects DESC
SETTINGS allow_introspection_functions=1

예제: 단편화 플레임 그래프 생성

같은 쿼리가 각 크기 클래스의 낭비를 오래된 할당 수에 비례해 백트레이스 사이에 나누고, 결과를 flamegraph.pl용 콜랩스된 형식으로 출력할 수 있습니다. 낭비는 있지만 충분히 오래된 샘플이 없는 크기 클래스는 [unattributed] 프레임 아래로 갑니다. 그래서 플레임 그래프의 총합은 총 낭비가 됩니다. system.jemalloc_sampled_allocations를 쿼리당 한 번 읽으세요: 매 읽기마다 새 프로필이 플러시되므로 두 서브쿼리는 서로 다른 데이터를 볼 것입니다.

WITH 60e9 AS min_age_ns
SELECT format('{} {}',
    if(s.est_old_objects > 0, s.stack, format('[unattributed];arena_{}_class_{}', toString(b.arena), toString(b.size))),
    toString(toUInt64(if(s.est_old_objects > 0, b.waste * s.est_old_objects / sum(s.est_old_objects) OVER (PARTITION BY b.arena, b.index), b.waste))))
FROM system.jemalloc_arena_bins AS b
LEFT JOIN
(
    SELECT
        arena,
        size_class,
        sum(weight) AS est_old_objects,
        arrayStringConcat(arrayMap(a -> demangle(addressToSymbol(a)), arrayReverse(trace)), ';') AS stack
    FROM system.jemalloc_sampled_allocations
    WHERE age_ns > min_age_ns
    GROUP BY arena, size_class, trace
) AS s ON s.size_class = b.index AND s.arena = b.arena
WHERE b.large = 0 AND b.purpose = '' AND b.waste > 0
SETTINGS allow_introspection_functions=1
clickhouse-client -q "..." | flamegraph.pl --color=mem --title="Fragmentation Flame Graph" --width 2400 > result.svg

힙 프로필을 디스크로 플러시

jeprof로 오프라인 분석하기 위해 힙 프로필을 파일로 저장해야 한다면 디스크로 플러시할 수 있습니다.

기본적으로 힙 프로필 파일은 /tmp/jemalloc_clickhouse._pid_._seqnum_.heap에 생성되는데, 여기서 _pid_는 ClickHouse의 PID이고 _seqnum_은 현재 힙 프로필의 전역 시퀀스 번호입니다. Keeper의 경우 기본 파일은 /tmp/jemalloc_keeper._pid_._seqnum_.heap이며, 같은 규칙을 따릅니다.

현재 프로필을 플러시하려면:

  • ClickHouse
  • Keeper
SYSTEM JEMALLOC FLUSH PROFILE

플러시된 프로필의 위치를 반환합니다.

echo jmfp | nc localhost 9181

다른 위치는 MALLOC_CONF 환경 변수에 prof_prefix 옵션을 덧붙여 정의할 수 있습니다. 예를 들어 /data 폴더에서 파일 이름 접두사가 my_current_profile이 되도록 프로필을 생성하려면 다음 환경 변수로 ClickHouse/Keeper를 실행하면 됩니다:

MALLOC_CONF=prof_prefix:/data/my_current_profile

생성된 파일은 접두사에 PID와 시퀀스 번호가 덧붙여집니다.

jeprof로 힙 프로필 파일 분석

디스크로 힙 프로필을 플러시한 후에는 jemalloc의 도구인 jeprof로 분석할 수 있습니다. 여러 방식으로 설치할 수 있습니다:

  • 시스템의 패키지 매니저 사용
  • jemalloc 저장소를 클론하고 루트 폴더에서 autogen.sh 실행. 이것은 bin 폴더 안에 jeprof 스크립트를 제공합니다.

사용 가능한 출력 형식은 다양합니다. 옵션의 전체 목록은 jeprof --help를 실행하세요.

심볼화된 힙 프로필

26.1+ 버전부터 ClickHouse는 SYSTEM JEMALLOC FLUSH PROFILE로 플러시할 때 심볼화된 힙 프로필을 자동으로 생성합니다. 심볼화된 프로필(.symbolized 확장자)은 포함된 함수 심볼을 가지며, ClickHouse 바이너리 없이 jeprof로 분석할 수 있습니다.

예를 들어 실행하면:

SYSTEM JEMALLOC FLUSH PROFILE

ClickHouse는 심볼화된 프로필의 경로(예: /tmp/jemalloc_clickhouse.12345.0.heap.symbolized)를 반환합니다.

그런 다음 jeprof로 직접 분석할 수 있습니다:

jeprof /tmp/jemalloc_clickhouse.12345.0.heap.symbolized --output_format [ > output_file]

바이너리 불필요 심볼화된 프로필(.symbolized 파일)을 사용할 때는 jeprof에 ClickHouse 바이너리 경로를 제공할 필요가 없습니다. 이것은 다른 머신이나 바이너리가 갱신된 후에 프로필을 분석하기 훨씬 쉽게 만듭니다.

오래된 비심볼화 힙 프로필이 있고 ClickHouse 바이너리에 여전히 접근할 수 있다면 전통적인 접근 방식을 사용할 수 있습니다:

jeprof path/to/clickhouse path/to/heap/profile --output_format [ > output_file]

비심볼화 프로필의 경우 jeprofaddr2line을 사용해 스택트레이스를 생성하는데, 이것은 매우 느릴 수 있습니다. 그렇다면 도구의 대체 구현을 설치하는 것이 좋습니다.

git clone https://github.com/gimli-rs/addr2line.git --depth=1 --branch=0.23.0
cd addr2line
cargo build --features bin --release
cp ./target/release/addr2line path/to/current/addr2line

대안으로 llvm-addr2line도 똑같이 잘 동작합니다(단, llvm-objdumpjeprof와 호환되지 않음에 주의하세요). 그리고 나중에 이렇게 사용하세요: jeprof --tools addr2line:/usr/bin/llvm-addr2line,nm:/usr/bin/llvm-nm,objdump:/usr/bin/objdump,c++filt:/usr/bin/llvm-cxxfilt

두 프로필을 비교할 때는 --base 인자를 사용할 수 있습니다:

jeprof --base /path/to/first.heap.symbolized /path/to/second.heap.symbolized --output_format [ > output_file]

예제

심볼화된 프로필 사용(권장):

  • 각 프로시저를 한 줄씩 적은 텍스트 파일 생성:
jeprof /tmp/jemalloc_clickhouse.12345.0.heap.symbolized --text > result.txt
  • 콜 그래프가 있는 PDF 파일 생성:
jeprof /tmp/jemalloc_clickhouse.12345.0.heap.symbolized --pdf > result.pdf

비심볼화 프로필 사용(바이너리 필요):

  • 각 프로시저를 한 줄씩 적은 텍스트 파일 생성:
jeprof /path/to/clickhouse /tmp/jemalloc_clickhouse.12345.0.heap --text > result.txt
  • 콜 그래프가 있는 PDF 파일 생성:
jeprof /path/to/clickhouse /tmp/jemalloc_clickhouse.12345.0.heap --pdf > result.pdf

플레임 그래프 생성

jeprof는 플레임 그래프를 만들기 위한 콜랩스된 스택을 생성할 수 있게 합니다.

--collapsed 인자를 사용해야 합니다:

jeprof /tmp/jemalloc_clickhouse.12345.0.heap.symbolized --collapsed > result.collapsed

또는 비심볼화 프로필로:

jeprof /path/to/clickhouse /tmp/jemalloc_clickhouse.12345.0.heap --collapsed > result.collapsed

그 후 다양한 도구로 콜랩스된 스택을 시각화할 수 있습니다.

가장 인기 있는 것은 flamegraph.pl이라는 스크립트를 포함하는 FlameGraph입니다:

cat result.collapsed | /path/to/FlameGraph/flamegraph.pl --color=mem --title="Allocation Flame Graph" --width 2400 > result.svg

또 다른 흥미로운 도구는 수집된 스택을 더 대화식으로 분석할 수 있게 하는 speedscope입니다.

프로파일러용 추가 옵션

jemalloc에는 프로파일러와 관련된 많은 옵션이 있습니다. 이 옵션들은 MALLOC_CONF 환경 변수를 수정해 제어할 수 있습니다. 예를 들어 할당 샘플 간의 간격은 lg_prof_sample로 제어할 수 있습니다. N바이트마다 힙 프로필을 덤프하려면 lg_prof_interval로 활성화할 수 있습니다.

옵션의 전체 목록은 jemalloc의 참조 페이지를 확인할 것을 권장합니다.

기타 리소스

ClickHouse/Keeper는 jemalloc 관련 메트릭을 다양한 방식으로 노출합니다.

경고: 이 메트릭들은 서로 동기화되지 않으며 값이 어긋날 수 있음을 아는 것이 중요합니다.

시스템 테이블 asynchronous_metrics

SELECT *
FROM system.asynchronous_metrics
WHERE metric LIKE '%jemalloc%'
FORMAT Vertical

참조.

시스템 테이블 jemalloc_bins

jemalloc 할당자를 통해 서로 다른 크기 클래스(빈)로 이루어진 메모리 할당에 대한 정보를 모든 아레나에서 집계해 담고 있습니다.

참조.

시스템 테이블 jemalloc_stats (26.2+)

malloc_stats_print()의 전체 출력을 단일 문자열로 반환합니다. SYSTEM JEMALLOC STATS 명령과 동일합니다.

SELECT * FROM system.jemalloc_stats

Prometheus

asynchronous_metrics의 모든 jemalloc 관련 메트릭은 ClickHouse와 Keeper 모두에서 Prometheus 엔드포인트를 사용해 노출됩니다.

참조.

Keeper의 jmst 4LW 명령

Keeper는 기본 할당자 통계를 반환하는 jmst 4LW 명령을 지원합니다:

echo jmst | nc localhost 9181

더 알아보기 (Learn more)