跳到主要内容
版本:3.2

管理内存

本文介绍如何管理并调优内存资源。

查看内存使用

您可以通过以下方法查看分析 BE 内存使用。

  • 通过浏览器或 curl 命令访问 Metrics 接口分析内存使用。

Metrics 统计每 10 秒更新一次。

curl -XGET -s http://be_ip:8040/metrics | grep "^starrocks_be_.*_mem_bytes\|^starrocks_be_tcmalloc_bytes_in_use" 

说明:

  • 将以上 be_ip 改为 BE 节点实际的 IP 地址。
  • BE be_http_port 默认为 8040

对应指标的含义参考 内存分类

  • 通过浏览器或 curl 命令访问 mem_tracker 接口分析 BE 内存使用。
http://be_ip:8040/mem_tracker

说明:

  • 将以上 be_ip 改为 BE 节点实际的 IP 地址。
  • BE be_http_port 默认为 8040

MemTracker

指标说明:

  • level: MemTracker 为树型结构,第一级为 BE 使用总内存,第二级为分类内存使用。

  • Label: 标识内存分类,对应指标的含义参考 内存分类

  • Parent: 父结点 Label。

  • Limit: 内存使用限制,-1 表示没有限制。

  • Current Consumption: 当前内存使用。

  • Peak Consumption: 峰值内存使用。

  • 通过浏览器或 curl 命令访问 TCmalloc 接口分析 BE 内存使用。

http://be_ip:8040/memz

说明:

  • 将以上 be_ip 改为 BE 节点实际的 IP 地址。
  • BE be_http_port 默认为 8040

示例:

------------------------------------------------
MALLOC: 777276768 ( 741.3 MiB) Bytes in use by application
MALLOC: + 8851890176 ( 8441.8 MiB) Bytes in page heap freelist
MALLOC: + 143722232 ( 137.1 MiB) Bytes in central cache freelist
MALLOC: + 21869824 ( 20.9 MiB) Bytes in transfer cache freelist
MALLOC: + 832509608 ( 793.9 MiB) Bytes in thread cache freelists
MALLOC: + 58195968 ( 55.5 MiB) Bytes in malloc metadata
MALLOC: ------------
MALLOC: = 10685464576 (10190.5 MiB) Actual memory used (physical + swap)
MALLOC: + 25231564800 (24062.7 MiB) Bytes released to OS (aka unmapped)
MALLOC: ------------
MALLOC: = 35917029376 (34253.1 MiB) Virtual address space used
MALLOC:
MALLOC: 112388 Spans in use
MALLOC: 335 Thread heaps in use
MALLOC: 8192 Tcmalloc page size
------------------------------------------------
Call ReleaseFreeMemory() to release freelist memory to the OS (via madvise()).
Bytes released to the OS take up virtual address space but no physical memory.

指标说明:

  • Bytes in use by application: BE 实际使用的内存。
  • Bytes in page heap freelist: BE 已不再使用,但是尚未归还给操作系统的内存。
  • Actual memory used: 操作系统监测到 BE 实际内存使用(BE 会预留一些空闲内存,不还给操作系统或是缓慢返还给操作系统)。
  • Bytes released to OS: BE 已设置为可回收状态,但是操作系统尚未回收的内存。

内存分类

StarRocks BE 中的内存分为以下几类。

标识Metric 名称说明BE 相关配置
processstarrocks_be_process_mem_bytesBE 进程实际使用的内存(不包含预留的空闲内存)。mem_limit
query_poolstarrocks_be_query_mem_bytesBE 查询层使用总内存。
loadstarrocks_be_load_mem_bytes导入使用的总内存。load_process_max_memory_limit_bytes, load_process_max_memory_limit_percent
table_metastarrocks_be_tablet_meta_mem_bytes元数据总内存。
compactionstarrocks_be_compaction_mem_bytes版本合并总内存。compaction_max_memory_limit, compaction_max_memory_limit_percent
column_poolstarrocks_be_column_pool_mem_bytescolumn pool 内存池,用于加速存储层数据读取的 Column Cache。
page_cachestarrocks_be_storage_page_cache_mem_bytesBE 存储层 page 缓存。disable_storage_page_cache, storage_page_cache_limit
chunk_allocatorstarrocks_be_chunk_allocator_mem_bytesCPU per core 缓存,用于加速小块内存申请的 Cache。chunk_reserved_bytes_limit
consistencystarrocks_be_consistency_mem_bytes定期一致性校验使用的内存。consistency_max_memory_limit_percent, consistency_max_memory_limit
schema_changestarrocks_be_schema_change_mem_bytesSchema Change 任务使用的总内存。memory_limitation_per_thread_for_schema_change
clonestarrocks_be_clone_mem_bytesTablet Clone 任务使用的总内存。
updatestarrocks_be_update_mem_bytes主键表使用的总内存。

内存相关配置项

BE 配置项

名称默认值说明
mem_limit90%BE 进程内存上限。可设为比例上限(如 "80%")或物理上限(如 "100G")。默认硬上限为 BE 所在机器内存的 90%,软上限为 BE 所在机器内存的 80%。如果 BE 为独立部署,则无需配置,如果 BE 与其它占用内存较多的服务混合部署,则需要合理配置。
load_process_max_memory_limit_bytes107374182400单节点上所有的导入线程占据的内存上限,取 mem_limit * load_process_max_memory_limit_percent / 100 和 load_process_max_memory_limit_bytes 中较小的值。如导入内存到达限制,则会触发刷盘和反压逻辑。
load_process_max_memory_limit_percent30单节点上所有的导入线程占据的内存上限比例,取 mem_limit * load_process_max_memory_limit_percent / 100 和 load_process_max_memory_limit_bytes 中较小的值,导入内存到达限制,会触发刷盘和反压逻辑。
compaction_max_memory_limit-1所有 Compaction 线程的最大内存使用量,取 mem_limit * compaction_max_memory_limit_percent/100 和 compaction_max_memory_limit 中较小的值,-1 表示没有限制。当前不建议修改默认配置。Compaction 内存到达限制,会导致 Compaction 任务失败。
compaction_max_memory_limit_percent100所有 Compaction 线程的最大内存使用百分比,取 mem_limit * compaction_max_memory_limit_percent / 100 和 compaction_max_memory_limit 中较小的值,-1 表示没有限制。当前不建议修改默认配置。Compaction 内存到达限制,会导致 Compaction 任务失败。
disable_storage_page_cachefalse是否开启 PageCache。开启 PageCache 后,StarRocks 会缓存最近扫描过的数据,对于查询重复性高的场景,会大幅提升查询效率。true 表示不开启。该配置项与 storage_page_cache_limit 配合使用,在内存资源充足和有大数据量 Scan 的场景中启用能够加速查询性能。自 2.4 版本起,该参数默认值由 TRUE 变更为 FALSE。 自 3.1 版本开始,该参数由静态变为动态。
storage_page_cache_limit20%BE 存储层 page 缓存可以使用的内存上限。
chunk_reserved_bytes_limit2147483648用于加速小块内存分配的 Cache,默认上限为 2GB。您可以在内存资源充足的情况下打开。
consistency_max_memory_limit_percent20一致性校验任务使用的内存上限,取 mem_limit * consistency_max_memory_limit_percent / 100 和 consistency_max_memory_limit 中较小的值。内存使用超限,会导致一致性校验任务失败。
consistency_max_memory_limit10G一致性校验任务使用的内存上限,取 mem_limit * consistency_max_memory_limit_percent / 100 和 consistency_max_memory_limit 中较小的值。内存使用超限,会导致一致性校验任务失败。
memory_limitation_per_thread_for_schema_change2单个 Schema Change 任务的内存使用上限,内存使用超限,会导致 Schema Change 任务失败。
max_compaction_concurrency-1Compaction 线程数上限(即 BaseCompaction + CumulativeCompaction 的最大并发)。该参数防止 Compaction 占用过多内存。 -1 代表没有限制。0 表示不允许 compaction。

Session 变量

名称默认值说明
query_mem_limit0各 BE 节点上单个查询的内存限制,单位是 Byte。建议设置为 17179869184(16GB)以上。
load_mem_limit0各 BE 节点上单个导入任务的内存限制,单位是 Byte。如果设置为 0,StarRocks 采用 exec_mem_limit 作为内存限制。