gpt4 book ai didi

java - rocksdb 内存不足

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:00 28 4
gpt4 key购买 nike

我试图找出为什么我的 kafka-streams 应用程序内存不足。我已经发现 rocksDB 正在消耗大量 native 内存,我尝试使用以下配置来限制它:

# 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 来分析内存使用情况(like described here)和结果清楚地表明 rocksDB 负责,但我不知道如何进一步限制 rocksDB 的内存使用。

jemalloc profiling

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

rocksDB statistics

我很高兴得到任何提示

最佳答案

我找出了造成这种情况的原因。

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

blockCacheSize=1350 * 1024 * 1024

并不一定意味着 rocksDB 内存限制为 1350MB。如果应用程序有例如分配给它的 8 个流分区也有 8 个 block 缓存,因此最多可以占用 1350 * 8 = ~11GB 内存。

关于java - rocksdb 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56663008/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com