【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5.1
【复现路径】
1>关闭关闭透明大页,
2>设置storage.block-cache.capacity = 48G,
3> memory-usage-limit = 82G
【遇到的问题:问题现象及影响】
TiKV 内存限制在 82G ,但是观察集群内存已经增长已经超过90G
为什么内存的限制条件为什么没生效
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
TiDBer_小阿飞
(Ti D Ber 72 C Kdw6z)
2023 年11 月 6 日 03:05
3
是GOBAL级别的么?tidb_server_memory_limit
另外, 设置该变量后,当 tidb-server 实例的内存用量达到 32 GB 时,TiDB 会依次终止正在执行的 SQL 操作中内存用量最大的 SQL 操作,直至 tidb-server 实例内存使用下降到 32 GB 以下。被强制终止的 SQL 操作会向客户端返回报错信息 Out Of Memory Quota!
。
正常不需要设置memory-usage-limit,只需要设置storage.block-cache.capacity,tikv最大使用内存就会限制在5/3*storage.block-cache.capacity。你执行下SHOW config WHERE NAME LIKE ‘%storage.block-cache.capacity%’;
看下storage.block-cache.capacity设置都生效了吗?
1 个赞
是TiKV 内存无限制增长,跟TiDB 没有关系偶
你看的是tikv节点的总内存吗?你看服务器上tikv进程的内存占用大概多少
随缘天空
(Ti D Ber Ivw R7o Pj)
2023 年11 月 7 日 01:31
9
查看Prometheus监控 TiKV 进程的内存使用情况,如果内存使用量不断增加,可能存在内存泄漏的问题。另外可以查看 TiKV 的日志文件,看看有没有警告或错误日志指示内存泄漏的存在
有猫万事足
2023 年11 月 7 日 03:56
10
tikv的内存主要是storage.block-cache.capacity
这个参数控制整个block-cache大小。这个参数影响rocksdb读。
然后就是write-buffer-size,这个write-buffer可能会有好几个。这个参数影响rocksdb写。
可以通过config查看个数和大小设置。
show config where name like '%write%buffer%' and type='tikv';
然后这两组参数其实是设置在rocksdb上的,tikv除了rocksdb,还有一个rust的壳,这个壳也会占用一定的内存。
简单粗暴的说,rust的部分是没有办法控制内存的。rocksdb里面,你无脑把block-cache往下压,肯定可以达到控制内存的效果。以我4c8g为例,原本的block-cache是3.5g。往下压到2g才能做到没有tikv的内存告警。不然内存大于80%的告警基本常驻。
所以我觉得你要是一定要内存的占用小于80%,干脆把block-cache设置到20g以下,等内存慢慢下去,再做一点点做调整到你的理想水位。
随缘天空
(Ti D Ber Ivw R7o Pj)
2023 年11 月 8 日 12:52
13
可以查看日志文件中Error级别的错误信息,看看有没有OOM相关的错误,或者在dashboard面板中的日志模块,在线搜索tikv节点的所有error级别的信息
逍遥_猫
2023 年11 月 13 日 07:41
15
在限制tikv storage.block-cache.capacity 情况下,那些会引起内存泄露呢?
resolved-ts 模块有已知的造成内存持续增长的问题,见 https://github.com/tikv/tikv/issues/15458
不用 stale read 的话可以关闭 resolved-ts 模块
[resolved-ts]
enable = false