首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rocksdb内存不足

rocksdb内存不足
EN

Stack Overflow用户
提问于 2019-06-19 08:13:08
回答 2查看 3.9K关注 0票数 11

我试图找出为什么我的卡夫卡流应用程序会耗尽内存。我已经发现rocksDB占用了大量的本机内存,我试图使用以下配置来限制它:

代码语言:javascript
复制
# put index and filter blocks in blockCache to avoid letting them grow unbounded (https://github.com/facebook/rocksdb/wiki/Block-Cache#caching-index-and-filter-blocks)
cache_index_and_filter_blocks = true;

# avoid evicting L0 cache of filter and index blocks to reduce performance impact of putting them in the blockCache (https://github.com/facebook/rocksdb/wiki/Block-Cache#caching-index-and-filter-blocks)
pinL0FilterAndIndexBlocksInCache=true

# blockCacheSize should be 1/3 of total memory available (https://github.com/facebook/rocksdb/wiki/Setup-Options-and-Basic-Tuning#block-cache-size)
blockCacheSize=1350 * 1024 * 1024

# use larger blockSize to reduce index block size (https://github.com/facebook/rocksdb/wiki/RocksDB-Tuning-Guide#difference-of-spinning-disk)
blockSize=256 * 1024

但是内存的使用似乎没有限制,我的容器最终得到了OOMKilled。

我使用jemalloc来分析内存使用情况(就像这里描述的),结果清楚地表明了rocksDB是负责的,但我不知道如何进一步限制rocksDB的内存使用。

我不知道它是否有用,但是为了完整起见,这里是从运行的rocksdb实例中收集的统计数据:

我很高兴有任何暗示

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-09 10:51:29

我发现是什么导致了这一切。

我认为我的kafka应用程序只有一个rockDB实例。但是,每个流分区都有一个实例。所以这个配置:

代码语言:javascript
复制
blockCacheSize=1350 * 1024 * 1024

并不一定意味着rocksDB内存被限制在1350 to。如果应用程序具有例如8个流分区,那么它也有8个blockCaches,因此最多可以占用1350 *8=~11 to内存。

票数 8
EN

Stack Overflow用户

发布于 2019-06-19 14:50:59

你看到内存使用量在快速增长还是在更长的一段时间内增长?

我们发现并修复了一些可能导致内存泄漏的RocksDB资源泄漏:

有一些迹象表明,可能还有其他的(https://issues.apache.org/jira/browse/KAFKA-8367),无论是在我们对RocksDB的使用中还是在RocksDB本身中。

哦,另一个想法是,如果您使用来自状态存储的迭代器,无论是在您的处理器中还是在Interactive中,您都必须关闭它们。

除了寻找漏洞之外,我恐怕对诊断RocksDB的内存使用没有太多的洞察力。您也可以限制Memtable的大小,但我认为我们在默认情况下不会将其设置得很大。

希望这能帮上忙

-John

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56663008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档