ARM环境并发请求多时tiflash报rss much larger than limit

【TiDB 使用环境】测试环境
【TiDB 版本】8.5.1
【部署方式】arm物理机
【操作系统/CPU 架构/芯片详情】麒麟v10sp3系统/飞腾 FT-2000
【机器部署详情】CPU64核/内存128G/磁盘4T,给tiflash分配了20G内存
【集群数据量】总量100条测试数据
【集群节点数】单节点
【问题复现路径】并发启动的sql大概有600个,数据库实际没多少数据
【遇到的问题:问题现象及影响】tiflash报错rss much larger than limit,具体报错信息见下图,导致数据库任何查询都无法使用,tifalsh内存改成40G也报这个错。top看tiflash实际RES内存占用不到10G,相关库表不启用tiflash则并发sql没问题。此现象在ARM环境毕现,相同的程序使用同级别的x86服务器上没问题。
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】

【其他附件:截图/日志/监控】

tiflash 安装了几台机器几个节点,配置是什么样的?

看上去是资源不够导致的

参考这个看看

提交问题前我看到了这个文章,他是两个节点,他的方法就是加大tiflash内存分配,我从20G加到40G也报一样的错,我的x86服务器一样的程序和配置不报错,只有arm的环境必现

只装了一个节点,跟tidb、tikv、pd都在同一台arm物理机上,是飞腾2000cpu,32线程,128G内存,4T硬盘,给tifalsh分配的20G内存,给tifalsh调整到40G内存仍然报错,类似的配置在x86架构的服务器上相同压力从来不报错

修改 TiFlash 的配置文件(tiflash.toml),适配 ARM 架构的内存管理特性:

toml

# 核心内存限制配置(根据ARM节点物理内存调整)
[memory]
# 全局内存上限(建议设为物理内存的60%-70%,ARM需预留更多系统内存)
limit = 40GB  # 64G物理内存建议40GB,避免挤占系统内存
# 内存超过limit时的触发阈值(默认90%,ARM下调至85%)
rss_over_limit_threshold = 0.85
# 内存超过阈值时的处理策略(kill表示终止超限查询,避免OOM)
rss_over_limit_action = "kill"

嗯, arm和x86不一样

TiDB在tiflash方面确实有其优势,比如横向扩展能力。 技术交流让我们共同进步。

操作系统层面是不是需要做什么配置,关于CPU的

rss_over_limit_threshold = 0.85
rss_over_limit_action = “kill”
楼主可以试试改完这两个参数的效果

修改后tiflash起不来,报错不识别G字符,如下:

修改成字节配置如下,配置不生效,配置40G的字节,仍然报错限制是20G,具体配置如下:

[profiles]

[profiles.default]
max_threads = 36
#max_memory_usage = single_sql_mem
max_memory_usage_for_all_queries = 21474836480
cop_pool_size = 0
cop_pool_handle_limit = 0
cop_pool_max_queued_seconds = 15
batch_cop_pool_size = 0
manual_compact_pool_size = 1
enable_elastic_threadpool = true
dt_compression_method = “LZ4”
dt_compression_level = 1
dt_page_gc_threshold = 0.5
max_bytes_before_external_group_by = 0
max_bytes_before_external_sort = 0
max_bytes_before_external_join = 0
enable_resource_control = true

[memory]
limit = 42949672960
rss_over_limit_threshold = 0.85
rss_over_limit_action = “kill”

[security]

enable_memory_rss_check = false
试试这个参数有没有效,ARM的内存检测机制与X86的不太一样

在生产环境中,尽量避免在 ARM 物理机上单节点混合部署所有组件,建议将 TiFlash 独立部署,以获得更稳定的内存资源

关于tiflash,TiDB的处理方式是分布式事务处理,这点与其他数据库有所不同。 如果还有其他问题,欢迎提出。

  • 降低查询并发:临时将并发数调至 100 以内,减少 TiFlash 的瞬时负载;
  • 调整 TiFlash 配置:增大max_concurrent_queries参数提升并发阈值,或微调内存统计容差相关参数;
  • 适配架构版本:检查 TiDB 8.5.1 对 ARM 架构 TiFlash 的适配补丁,升级至对应架构的兼容版本;
  • 临时规避:若暂无法适配,可临时关闭 TiFlash,仅用 TiKV 处理查询。