内存管理

本文为您介绍StarRocks BE(Backend)中内存使用分类、内存配置以及如何查看内存使用。

内存分类

您可以在E-MapReduce控制台目标集群的集群服务页面,STARROCKS服务的配置页面的be.conf页签,新增或修改BE相关配置,具体操作请参见管理配置项

标识

Metric名称

描述

BE相关配置

process

starrocks_be_process_mem_bytes

BE进程实际使用的内存(不包含预留的空闲内存)。

mem_limit

query_pool

starrocks_be_query_mem_bytes

BE查询层使用总内存。

load

starrocks_be_load_mem_bytes

导入使用的总内存。

load_process_max_memory_limit_bytes,load_process_max_memory_limit_percent

table_meta

starrocks_be_tablet_meta_mem_bytes

元数据总内存。

compaction

starrocks_be_compaction_mem_bytes

版本合并总内存。

compaction_max_memory_limit,compaction_max_memory_limit_percent

column_pool

starrocks_be_column_pool_mem_bytes

Column Pool内存池,用于加速存储层数据读取的Column Cache。

page_cache

starrocks_be_storage_page_cache_mem_bytes

BE存储层page缓存。

disable_storage_page_cache,storage_page_cache_limit

chunk_allocator

starrocks_be_chunk_allocator_mem_bytes

CPU per core缓存,用于加速小块内存申请的 Cache。

chunk_reserved_bytes_limit

consistency

starrocks_be_consistency_mem_bytes

定期一致性校验使用的内存。

consistency_max_memory_limit_percent,consistency_max_memory_limit

schema_change

starrocks_be_schema_change_mem_bytes

Schema Change任务使用的总内存。

memory_limitation_per_thread_for_schema_change

clone

starrocks_be_clone_mem_bytes

Tablet Clone任务使用的总内存。

update

starrocks_be_update_mem_bytes

主键模型使用的总内存。

内存相关配置

BE配置

名称

默认值

描述

mem_limit

90%

BE进程内存上限,默认硬限为BE所在机器内存的90%,软限为BE所在机器内存的80%。

如果是BE独立部署的话,不需要配置,如果是和其它占用内存比较多的服务混合部署的话,要合理配置。

load_process_max_memory_limit_bytes

107374182400

分别表示导入最大可用内存上限和最大可用内存百分比上限。

系统会在mem_limit * load_process_max_memory_limit_percent / 100和load_process_max_memory_limit_bytes中取较小者作为最终的可用内存上限。

如果导入内存到达限制,则会触发刷盘和反压逻辑。

load_process_max_memory_limit_percent

30

compaction_max_memory_limit

-1

分别表示Compaction内存上限和内存百分比上限。

系统会在mem_limit * compaction_max_memory_limit_percent / 100和compaction_max_memory_limit中取较小者作为最终的Compaction内存上限。默认值-1表示没有限制,不建议修改默认配置。

如果Compaction内存到达限制,则会导致Compaction任务失败。

compaction_max_memory_limit_percent

100

disable_storage_page_cache

true

是否禁用BE存储层page缓存,和storage_page_cache_limit配合使用,在内存资源充足和有大数据量查询的场景中可以打开,能够加速查询性能。

storage_page_cache_limit

0

BE存储层page缓存可以使用的内存上限。

chunk_reserved_bytes_limit

2147483648

用于加速小块内存分配的Cache,默认上限为2147483648(2 GB),在内存资源充足的情况下可以考虑打开。

consistency_max_memory_limit

10G

一致性校验任务使用的内存上限和内存上限百分比。

系统会在mem_limit * consistency_max_memory_limit_percent / 100和consistency_max_memory_limit中取较小者作为最终的内存上限。

如果内存使用超限,则会导致任务失败。

consistency_max_memory_limit_percent

20

memory_limitation_per_thread_for_schema_change

2

单个Schema Change任务的内存使用上限。

如果内存使用超限,则会导致Schema Change任务失败。

tc_use_memory_min

10737418240

TCmalloc最小预留内存。

如果小于该值,则StarRocks不会将空闲内存返还给操作系统。

Session变量

名称

默认值

描述

exec_mem_limit

2147483648

单个instance内存限制。

load_mem_limit

0

单个导入任务的内存限制。

默认为0,即表示不使用该变量,而使用exec_mem_limit作为内存限制。

查看内存使用

您可以通过以下两种方法分析BE内存使用情况:

方式一:通过Metrics接口分析BE内存使用

Metrics统计每10秒更新一次。通过curl访问示例如下。

# BE webserver_port默认是8040。
curl -XGET -s http://BE_IP:8040/metrics | grep "^starrocks_be_.*_mem_bytes\|^starrocks_be_tcmalloc_bytes_in_use"
说明

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

方式二:通过mem_tracker接口分析BE内存使用

您可以通过浏览器或curl访问。本示例通过浏览器访问。

# BE webserver_port默认是8040。
http://be_ip:8040/mem_tracker

访问情况如下图所示。mem_tracker

各参数含义如下:

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

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

  • Parent:父结点Label。

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

  • Current Consumption:当前内存使用。

  • Peak Consumption:峰值内存使用。